对这样一个基本问题抱歉 - 我必须遗漏一些明显的问题。
我想构建一个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个元素的列表,第一个元素将包含m1
和m2
,第二个元素将包含m3
和m4
等。我的初步尝试是正确的,但lmm对象不会保留他们的类。
mlist <- list(c(m1,m2),
c(m3,m4),
c(m5,m6))
它具有正确的长度(即length(mlist)
等于3),但我认为我可以使用
lm
对象本身
class(mlist[1][[1]])
但这个元素显然是一个列表。
我是否搞砸了我在第一步中如何构建列表,或者这是关于lm对象的更基本的东西?
答案 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
对象。