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

时间:2012-05-03 04:32:09

标签: 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)

我想要一个包含3个元素的列表,第一个元素将包含m1m2,第二个元素将包含m3m4等。我的初步尝试是正确的,但lmm对象不会保留他们的类。

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

它具有正确的长度(即length(mlist)等于3),但我认为我可以使用

访问lm对象本身
class(mlist[1][[1]])

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

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

1 个答案:

答案 0 :(得分: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]将返回长度为一的列表。第一个元素仍然是一个列表。因此,您必须执行mlist[1][[1]][[1]]之类的操作,以便一直向下到lm对象。