例如,作为一个最小的工作示例,我希望能够将表达式动态传递给 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 ,它建议使用
quote
或 substitute
,但是> 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/