我想构建一个可以在数据表的j
中使用的函数。我希望它不需要明确传递一个列(我很懒)。
以下内容不起作用Error in test(x) : object 'x' not found
test <- function(x=NULL){
list(z=if (is.null(x)) evalq(x, envir=parent.frame()) else x)
}
a <- data.table(x=1:2, y=1:2)
a[, test(x)] // works well
a[, test()] // error
如果我a[, test(x)]
我
> a[, test(x)]
z
1: 1
2: 2
我希望a[, test()]
给我同样的东西。
答案 0 :(得分:2)
你可以使用类似的东西:
test <- function(x=NULL){
if (is.null(x)) get('x', parent.frame(3)[,list(x)]) else list(x)
}
但这是一个非常糟糕的主意,因为一旦您向by
语句引入data.table
,它就会中断。这是因为你没有给data.table
一个机会弄清楚你将要使用哪些列,因为它还没有获得无所不能,一旦你在一个函数中混淆你需要的列,它没有什么可以为你做的。
发布您的实际问题(或更近似的问题)可能是一个更好的主意,也许您会获得解决方案的替代建议。