2012-05-03 28 views
3

對於這樣一個基本問題的道歉 - 我必須錯過一些明顯的東西。列出一個LM對象,保留他們的類

我想構建一個lm對象的列表,然後我將在調用llply時使用該對象來對此列表執行中介分析。但是這並不重要 - 我只是首先要製作一個長度爲m的列表(其中m是模型集合),並且m中的每個元素本身都會包含n個對象。

因此,在這個簡單的例子

d1 <- data.frame(x1 = runif(100, 0, 1), 
      x2 = runif(100, 0, 1), 
      x3 = runif(100, 0, 1), 
      y1 = runif(100, 0, 1), 
      y2 = runif(100, 0, 1), 
      y3 = runif(100, 0, 1)) 

m1 <- lm(y1 ~ x1 + x2 + x3, data = d1) 
m2 <- lm(x1 ~ x2 + x3, data = d1) 
m3 <- lm(y2 ~ x1 + x2 + x3, data = d1) 
m4 <- lm(x2 ~ x1 + x3, data = d1) 
m5 <- lm(y3 ~ y1 + y2 + x3, data = d1) 
m6 <- lm(x3 ~ x1 + x2, data = d1) 

欲含有3個元素的列表,並且所述第一元件將包含m1m2,第二將包含m3m4等我最初嘗試是排序的對,但lmm對象不保留他們的類。

mlist <- list(c(m1,m2), 
       c(m3,m4), 
       c(m5,m6)) 

它有正確的長度(即length(mlist)等於3),但我想我可以訪問lm對象本身

class(mlist[1][[1]]) 

,但該元素顯然是一個列表。

我搞砸了如何在第一步建立列表,或者這是關於lm對象更基礎的東西嗎?

回答

7

不,你剛剛與c和列表索引混淆。試試這個:

mlist <- list(list(m1,m2), 
       list(m3,m4), 
       list(m5,m6)) 
> class(mlist[[1]][[1]]) 
[1] "lm" 

所以c將壓扁他們串連名單。在lm對象的情況下,這基本上意味着它將每個對象組件的列表中的每個對象都展平,然後將所有這些列表連接在一起。 c更直觀地用於原子向量。

列表的索引往往讓人們往上走。需要記住的是[將始終返回一個子列表,而[[將選擇一個元素。

在我上面的例子中,這意味着mlist[1]將返回一個長度爲1的列表。第一個元素仍然是列表。所以你不得不這樣做,像mlist[1][[1]][[1]]這樣一路下來到lm對象。

+0

輝煌,謝謝。我仍然有很多瞭解列表和索引。 – tomw