我试图在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")]
有没有更好的方法来实现我的目标?
答案 0 :(得分:0)
一个简单的(但可能是次优的)解决方法是通过子集来提供...
sapply(levels(iris$Species), function(x) {with(subset(iris,
Species==x),wtd.var(Petal.Length,Sepal.Length))})
希望这有帮助。