0

我想构建一个可以在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()]给我同样的东西。

4

1 回答 1

2

你可以让它与类似的东西一起工作:

test <- function(x=NULL){
    if (is.null(x)) get('x', parent.frame(3)[,list(x)]) else list(x)
}

但这是一个非常糟糕的主意,因为一旦您将 a 引入by您的data.table陈述,它就会中断。那是因为你没有data.table机会弄清楚你将要使用哪些列,而且由于它还没有获得全能,一旦你在函数中混淆了你需要的列,它就没有什么可以做的了为你做。

发布您的实际问题(或更接近的近似值)可能是一个更好的主意,也许您会获得解决方案的替代建议。

于 2013-11-13T16:07:17.863 回答