将参数传递给lapply作为data.table中的变量名

时间:2015-05-06 11:16:13

标签: r function data.table lapply

我试图在datatable中使用lapply将参数传递给函数,只有参数是变量名(在函数中调用)。 wtd.var函数来自Hmisc。 使用虹膜的示例:

library(Hmisc)
library(data.table)
iris <- as.data.table(iris)
weights.v ="Sepal.Length" 
iris[,lapply(.SD,wtd.var,weights=weights.v),by = "Species"]

抛出错误,自然因为变量是一个字符串。我尝试了各种组合或者paste0和parse,但get()似乎也是这样做的 -

iris[,lapply(.SD,wtd.var,weights=get(weights.v)),by = "Species"]

有效。但是当我尝试使用.SDcols时,它会被忽略

iris[,lapply(.SD,wtd.var,weights=weights.v),by = "Species",.SDcols=c("Petal.Length")]

有没有更好的方法来实现我的目标?

1 个答案:

答案 0 :(得分:0)

一个简单的(但可能是次优的)解决方法是通过子集来提供...

sapply(levels(iris$Species), function(x) {with(subset(iris,
Species==x),wtd.var(Petal.Length,Sepal.Length))})

希望这有帮助。

相关问题