我试图创建一个修改data.table的函数,并希望使用一些非标准的评估方法,但我意识到我不知道如何在data.table内部使用它。
我的函数基本上是这样的:
do_stuff <- function(dt, col) {
copy(dt)[, new_col := some_fun(col)][]
}
我希望用这个名字来称呼它:
do_stuff(data, column)
“column”是存在于“data”内的列的名称。如果我运行该函数,会出现错误:
#> Error in some_fun(col) : object 'column' not found
这意味着data.table显然将正确的名称传递给函数("column"),但由于某种原因它没有找到。下面是一个最小可重现的示例:
library(data.table)
data <- data.table(x = 1:10, y = rnorm(10))
plus <- function(x, y) {
x + y
}
add_one <- function(data, col) {
copy(data)[, z := plus(col, 1)][]
}
add_one(data, y)
#> Error in plus(col, 1): object 'y' not found
使用 deparse(substitute(col))
似乎不起作用,很不幸 :(
add_one <- function(data, col) {
copy(data)[, z := plus(deparse(substitute(col)), 1)][]
}
add_one(data, y)
#> Error in x + y: non-numeric argument to binary operator
deparse(substitute
。 - akrun