我有一个问题,包括data.table
函数中的操作。输入参数是 data.table 名称和列/变量名称。
我可以使用get()
命令引用data.table。但是,对变量名使用相同的命令不起作用。我知道这get()
可能不适合列/变量名称,但我坚持使用哪个命令。
已编辑:我现在已经包含substitute()
而不是get()
它仍然无法正常工作。
toy_example_fun <- function(d, .expr){
.expr = substitute(.expr)
setkey(get(d), .expr) # ==> doesn't work
d.agg <- get(d)[,list(sum(y), sum(v)), by=.expr] # --> works
}
toy_example_fun("DT", x)
替代方案: quote()
-> 这行得通。但是,我对在函数内部工作的解决方案感兴趣。
DT <- data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
d <- "DT"
variable <- quote(x)
d.agg <- get(d)[,list(sum(y), sum(v)), by=variable]
尽管如此,后一种替代方法variable <- quote(x)
会产生错误消息:
<simpleError in doTryCatch(return(expr), name, parentenv, handler): object 'x' not found>
<simpleError in is.scalar(val): object 'x' not found>
<simpleError in is.data.frame(obj): object 'x' not found>
谢谢你的帮助。