这感觉就像一个非常简单的问题,但它的解决方案让我无法在大约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)
有什么建议?非常感谢你提前的时间!
如果要传递字符串,请执行以下操作:
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)
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |