2012-05-03 8 views
3

このような初歩的な質問に対する謝罪 - 私は何かが明らかに欠けているに違いありません。lmオブジェクトのリストを作成し、そのクラスを保持します

lmオブジェクトのリストを作成したいとします。これをllplyコールで使用して、このリストのメディエーション分析を実行します。しかし、これは重要ではありません。まず、長さm(mはモデルの集合です)のリストを作成したいと思います。m内の各要素自体にn lmオブジェクトが含まれます。

だから、この単純な例

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に等しい)が、私は

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

lmオブジェクト自体にアクセスすることができると思ったけど、この要素は明らかにリストです。

私は最初のステップでリストを作成する方法を苦労しているのですか?これは、lmオブジェクトに関してより根本的なものですか?

答えて

7

いいえ、あなたはちょうどcとリストの索引付けと混乱しています。これを試してみてください:

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

のでcそれらを平坦化することにより、リストを連結します。 lmオブジェクトの場合、基本的には、各オブジェクトコンポーネントのリスト内の各lmオブジェクトを平坦化してから、これらのリストをすべて連結して連結することを意味します。 cは、より直感的に原子ベクトルで使用されます。

リストの索引付けは、多くの場合、人を引き上げます。覚えておくべきことは、[は常にサブリストを返し、[[は要素を選択するということです。

上記の例では、mlist[1]は長さ1のリストを返します。その最初の要素はまだリストです。だから、のような何かをして、lmオブジェクトに至るまでその道を進む必要があります。

+0

素晴らしい、ありがとう。私はまだリストとインデックスについて学ぶために1トン持っています。 – tomw

関連する問題