如何在循环(或lapply)中的操作中使用变量列表?

时间:2017-07-06 20:47:49

标签: r loops lapply

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

样本数据框如下

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)

1 个答案:

答案 0 :(得分:2)

也许您需要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)。