2017-07-06 51 views
0

我想用列表中的不同變量進行一系列分析。這些變量位於相同的數據集中。如何在循環(或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) 
+0

我只是將一行更改爲'model < - lm(y〜。,data = df [,c('y',var)])' – rawr

回答

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)。

+0

謝謝。在這種情況下,'form = reconfulate(var,「y」)'和'form < - formula(paste0(「y〜」,var))都可以工作。我發現'df [[a]]'也有幫助。 – cyrusjan

相關問題