【发布时间】:2012-08-08 06:46:57
【问题描述】:
我在函数中包含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>
感谢您的帮助。
【问题讨论】:
-
感谢您将我推荐给您的帖子,Andrie。但是,如果我使用
substitute(),它仍然无法正常工作。 -
请通过在链接问题的答案中合并建议来编辑您的问题 - 否则您可能会因为重复而被关闭。
-
完成。再次感谢您的评论。
-
这仍然是重复的。您应该按照链接答案中的说明使用
quote(x)。
标签: r function data.table