R中data.table的编程子集

时间:2015-04-01 16:01:49

标签: r data.table

这感觉就像一个非常简单的问题,但它的解决方案让我在大约90分钟的尝试,搜索和阅读手册以及在线方面都没有。

说我有一个data.table:

DT<-data.table(a=runif(n = 10),b=runif(n = 10),c=runif(n = 10))

显然这样的事情有效:

DT[a > 0.5]

并给出DT的子集,其中“a”列中的值大于0.5。但是,如果我想要更灵活一点(因为子集嵌入在更大的例程中),那该怎么办呢。

我想做的是让这个原型功能起作用:

flexSubset<-function(sColumnToSubset,dMin){
subs<-DT[sColumnToSubset>dMin]
return(subs)
}

我尝试过没有成功,其他许多人......

with=FALSE

有什么建议吗?非常感谢您提前的时间!

1 个答案:

答案 0 :(得分:8)

如果要传递字符串,请执行以下操作:

flexSubset = function(sColumnToSubset, dMin)
                DT[get(sColumnToSubset) > dMin]

flexSubset("a", 0.5)

如果您想传递未评估的表达式,那么:

flexSubset = function(sColumnToSubset, dMin) {
                lhs = substitute(sColumnToSubset)
                DT[eval(lhs) > dMin]
             }

flexSubset(a, 0.5)
flexSubset(a / b, 0.5)