这似乎是一个非常简单的问题,但是它的解决方案使我无法进行大约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。但是,如果我想变得更灵活些(因为该子集嵌入在更大的例程中),该怎么办?
我想做的是使此原型(prototype)功能起作用:
flexSubset<-function(sColumnToSubset,dMin){
subs<-DT[sColumnToSubset>dMin]
return(subs)
}
我尝试了许多失败的尝试,但都没有成功...
with=FALSE
有什么建议么?非常感谢您提前抽出宝贵的时间!
最佳答案
如果要传递字符串,请执行以下操作:
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)