r - 列出 lm 对象,保留它们的类

标签 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 对象的更基本的东西?

最佳答案

不,您只是对 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 的列表。第一个元素仍然是一个列表。因此,您必须执行 mlist[1][[1]][[1]] 之类的操作才能以这种方式一直到 lm 对象。

关于r - 列出 lm 对象,保留它们的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10425173/

相关文章:

r - 对多个测试的观察结果进行分组

r - 将数据集中不存在的值添加到图例

r - 如何使用 plyr 对行进行编号?

r - 两个 geom_bar() 和因子变量的错误顺序

r - 在循环中对数据进行子集化并将结果写入列表

R 使用 ddply 或聚合

r - 在 tidycensus 中使用 purrr() 而不是 lapply 任意城市/县对?

datetime - 使用哪个 R 时间/日期类和包?

r - 将数据帧与 data.table 匹配

r - if语句去掉: Error in if: argument is of length zero