这感觉就像一个非常简单的问题,但它的解决方案让我在大约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
有什么建议吗?非常感谢您提前的时间!
答案 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)