R中data.table的编程子集

rus*_*sfx 5 r data.table

这感觉就像一个非常简单的问题,但它的解决方案让我无法在大约90分钟内尝试,搜索和阅读手册和在线.

说我有一个data.table:

DT<-data.table(a=runif(n = 10),b=runif(n = 10),c=runif(n = 10))
Run Code Online (Sandbox Code Playgroud)

显然这样的工作:

DT[a > 0.5]
Run Code Online (Sandbox Code Playgroud)

并给我DT的子集,其中"a"列中的值大于0.5.但是如果我想要更灵活一点(因为子集嵌入在更大的例程中)会怎样.

我想做的是使这个原型功能工作:

flexSubset<-function(sColumnToSubset,dMin){
subs<-DT[sColumnToSubset>dMin]
return(subs)
}
Run Code Online (Sandbox Code Playgroud)

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

with=FALSE
Run Code Online (Sandbox Code Playgroud)

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

edd*_*ddi 8

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

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

flexSubset("a", 0.5)
Run Code Online (Sandbox Code Playgroud)

如果要传递未评估的表达式,则:

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

flexSubset(a, 0.5)
flexSubset(a / b, 0.5)
Run Code Online (Sandbox Code Playgroud)