【问题标题】:How to use a list of variable in the operation in a loop (or lapply)?如何在循环(或 lapply)的操作中使用变量列表?
【发布时间】:2017-07-06 20:47:48
【问题描述】:

我想使用列表中的不同变量进行一系列分析。这些变量在同一个数据集中。

示例数据框如下

df <- data.frame(x1=runif(10),
             x2=runif(10),
             x3=runif(10),
             x4=runif(10),
             y=runif(10))

# I would like to use variables from this list
xlist <- c("x1","x2","x3")

summary<-NA

我的想法是使用for循环或lapply,但是从列表中调用变量时,这两种方法似乎都有相同的问题。 问题是我在循环中使用“var”来表示x1、x2或x3,但是像“lm”这样的函数需要一个“data”参数,并且该函数会将var识别为要调用的变量,而不是x1 ,x2 或 x3。

知道如何避免这种情况吗?

# using for loop
for (var in xlist) {
  model <- lm(y~var,data=df)
  temp <- data.frame(coef=model$coefficients[2])
  summary<- rbind(summary,temp)
}

# using lapply
func <- function(var){
  model <- lm(y~var,data=df)
  temp <- data.frame(coef=model$coefficients[2])
}

result <- lapply(xlist, func)

【问题讨论】:

  • 我只想把这一行改成model &lt;- lm(y~.,data=df[, c('y', var)])

标签: r loops lapply


【解决方案1】:

也许你需要formula 函数...

for (var in xlist) {
  form <- formula(paste0("y~",var))
  model <- lm(form,data=df)
  temp <- data.frame(coef=model$coefficients[2])
  summary<- rbind(summary,temp)
}

summary
         coef
x1  0.3626764
x2 -0.3194918
x3  0.1216511

它应该以与lapply 完全相同的方式工作(或者您可能更喜欢sapply)。

【讨论】:

  • 谢谢。在这种情况下,form = reformulate(var, "y")form &lt;- formula(paste0("y~",var)) 都可以工作。我发现df[[a]] 也很有帮助。
猜你喜欢
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
相关资源
最近更新 更多