如何在没有传递参数的情况下访问`j`中的函数中的data.table列?

时间:2013-11-13 13:23:32

标签: r data.table

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

1 个答案:

答案 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一个机会弄清楚你将要使用哪些列,因为它还没有获得无所不能,一旦你在一个函数中混淆你需要的列,它没有什么可以为你做的。

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