r - 如何在函数内部使用data.table?

标签 r data.table

例如,作为一个最小的工作示例,我希望能够将表达式动态传递给 data.table 对象以创建新列或修改现有列:

dt <- data.table(x = 1, y = 2)
dynamicDT <- function(...) {
    dt[, list(...)]
}
dynamicDT(z = x + y)

我期待:
   z
1: 3

但相反,我得到了错误:
Error in eval(expr, envir, enclos) : object 'x' not found 

那么我该如何解决这个问题?

尝试:

我见过this post ,建议使用 quotesubstitute , 但
> dynamicDT(z = quote(x + y))
Error in `rownames<-`(`*tmp*`, value = paste(format(rn, right = TRUE),  : 
  length of 'dimnames' [1] not equal to array extent

或者
> dynamicDT <- function(...) {
+     dt[, list(substitute(...))]
+ }
> dynamicDT(z = x + y)
Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L,  : 
  first argument must be atomic

没有为我工作。

最佳答案

这应该是大卫回答的更好选择:

dynamicDT <- function(...) {
 dt[, eval(substitute(...))]
}

dynamicDT(z := x + y)
#   x y z
#1: 1 2 3

关于r - 如何在函数内部使用data.table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910012/

相关文章:

R:使用xtable()打印两个表

r - 如何在 R 中的 ggplot2 中绘制混合效应模型估计值?

r - 在 r 中平均每 16 列

r - data.table 上的数学运算(在 R 中)

r - 使用 data.table 写入和加载 JSON 字符串

r - 使用 tidyverse 和 sapply 在列表上创建一个函数

r - 使用另一个 data.table 子集一个 data.table

r - 如何加入具有多列和多个值的 data.table

r - 使用 data.table 函数 foverlaps 查找两个表中重叠范围的交集

r - 叠加不同物种积累图