3

为这样一个基本的问题道歉——我一定遗漏了一些明显的东西。

我想构建一个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 个元素的列表,第一个元素将包含m1and m2,第二个元素将包含m3and m4,等等。我最初的尝试是正确的,但是 lmm 对象不保留它们的类。

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

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

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

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

我是在第一步搞砸了如何构建列表,还是这对 lm 对象来说更基本?

4

1 回答 1

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 的列表。第一个元素仍然是 list。所以你必须做一些像mlist[1][[1]][[1]]这样一直到lm对象的事情。

于 2012-05-03T04:43:02.267 回答