【问题标题】:Pass parameter to lapply as variable name in data.table [duplicate]将参数传递给 lapply 作为 data.table 中的变量名 [重复]
【发布时间】:2015-05-06 11:16:13
【问题描述】:

我试图在数据表中使用 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 并解析,但 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")]

有没有更好的方法来实现我正在做的事情?

【问题讨论】:

  • @docendodiscimus setDT(iris) 不起作用...
  • @DavidArenburg,请随时纠正它,以便它工作
  • @DavidArenburg,在我的会话中它似乎确实有效 - 为什么不应该呢?
  • @docendodiscimus 因为this 它对你有用很奇怪。它对我不起作用,这是记录在案的行为(根据 Aruns 的回答)。
  • @DavidArenburg,好吧,我没有任何单一的错误消息,之后虹膜打印得很好(作为 data.table)..

标签: r function data.table lapply


【解决方案1】:

一个简单(但可能不是最佳)的解决方法是按子集应用...

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 2016-09-02
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多