r 循环 data.frame 到 运行 具有不同 DV 和权重的相同回归

r looping through a data.frame to run same regression with differing DVs and weights

您好,我无法让 lapply 中的 lm 遍历不同的 DV,我已经在 data.frame.

中预先确定了相应的权重列

这是一个工作示例:

require(dplyr)


df <- mtcars %>% mutate_at(
  vars(mpg:drat),
  funs(wt=rnorm(n()))
  )
dvs <- names(select(df,mpg:drat))
res <- list()
res <- lapply(dvs, function(x) {
  formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
  lm(formula,df)
})

但是这个returns"object 'mpg_wt' not found"

res <- lapply(dvs, function(x) {
  formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
  weightvars <- paste0(x,"_wt")
  lm(formula,weights=as.formula(weightvars),df)
})

还有这个returns"variable lengths differ (found for '(weights)')"

res <- lapply(dvs, function(x) {
  formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
  weightvars <- paste0(x,"_wt")
  lm(formula,weights=eval(weightvars),df)
})

只需使用解析并传递 weightvars 作为 text 的值。

希望对您有所帮助:


res <- lapply(dvs, function(x) {
  formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
  weightvars <- paste0(x,"_wt")
  lm(formula,weights=eval(parse(text=weightvars)),df)
})

或在 eval 中使用 as.name 函数,如下所示:

res <- lapply(dvs, function(x) {
  formula <- as.formula(paste0(x," ~ wt + qsec + as.factor(vs)"))
  weightvars <- paste0(x,"_wt")
  lm(formula,weights=eval(as.name(weightvars)),data=df)
})