列出lm对象,保留他们的类

tom*_*omw 3 r plyr

为这样一个基本问题道歉 - 我必须遗漏一些明显的问题.

我想构建一个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)
Run Code Online (Sandbox Code Playgroud)

我想包含三个元素的列表,第一个元素将包含m1m2,第二个将包含m3m4等我最初的尝试是排序的权利,但在LMM对象不保留其类.

mlist <- list(c(m1,m2),
              c(m3,m4),
              c(m5,m6))
Run Code Online (Sandbox Code Playgroud)

它有正确的长度(即length(mlist)等于3),但我认为我可以访问lm对象本身

class(mlist[1][[1]])
Run Code Online (Sandbox Code Playgroud)

但这个元素显然是一个列表.

我是否搞砸了我在第一步中如何构建列表,或者这是关于lm对象的更基本的东西?

jor*_*ran 7

不,你只是混淆c并列出索引.试试这个:

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

所以c将通过展平它们来连接列表.在lm对象的情况下,这基本上意味着它lm在每个对象组件的列表中展平每个对象,然后将所有这些列表连接在一起.c更直观地用于原子矢量.

列表的索引通常会让人兴奋.要记住的是,[将始终返回子列表,同时[[选择一个元素.

在上面的例子中,这意味着mlist[1]将返回长度为1的列表.第一个元素仍然是一个列表.所以你必须做一些事情,就像mlist[1][[1]][[1]]这样一直到lm对象.