2013-08-23 34 views
2

我有一個迴歸模型列表,它們的術語數都相同(即預測變量的數目相同)。實質上,他們都有不同的模型術語是正確的。但是當談到把它們放入迴歸表時,我只希望它們的所有模型共享一個公式,只是爲了演示。在擬合模型對象中重命名術語

一些指示性數據

library(plyr) 
d1 <- data.frame(y = rnorm(100), 
      x1 = runif(100), 
      x2 = runif(100), 
      x3 = runif(100), 
      x4 = runif(100)) 

飛度車型

mods.form <- paste("y ~ x", 1:4, sep = "") 
mod.list <- llply(mods.form, function(i) lm(i, d1)) 

下面是我想修改

llply(mod.list, function(i) attr(terms(i), "variables")) 

[[1]] 
list(y, x1) 

[[2]] 
list(y, x2) 

[[3]] 
list(y, x3) 

[[4]] 
list(y, x4) 

我想在列表中的每個模型具有相同的條款變量名稱作爲第一個模型,所以我試過了:

mod.list2 <- llply(mod.list, function(i) attr(terms(i), "variables") = list("y", "x1")) 

提供此錯誤

Error in attr(terms(i), "variables") = list("y", "x1") : 
could not find function "terms<-" 

有一個簡單的解決辦法嗎?

回答

2

也許這是你在找什麼:

使用您提供

d1 <- data.frame(y = rnorm(100), 
      x1 = rnorm(100), 
      x2 = rnorm(100), 
      x3 = rnorm(100), 
      x4 = rnorm(100)) 

首先,每個變量x重命名爲一些需要的名爲 「X」

names(d1) <- c("y", rep("x", times=length(d1)-1)) 

數據幀然後,對每個x變量在列表d1上使用lapply,將y作爲參數 傳遞給匿名函數

mod.list <- lapply(d1[2:ncol(d1)], function(x,y){ 
        lm("y ~ x",d1) 
       }, y=d1[, 'y']) 

最後,調用llply在mod.list我們得到:

> llply(mod.list, function(x){ 
+ attr(terms(x), "variables") 
+ }) 
$x 
list(y, x) 

$x.1 
list(y, x) 

$x.2 
list(y, x) 

$x.3 
list(y, x)