将模型添加到列表中

7
我可以帮您进行翻译。这段内容是关于编程的。它提到了创建模型列表的问题。假设已经创建了一个模型:
> rp <- rpart(V41 ~ ., data=learnData, method="class")

如果我直接创建列表,那就没问题:

> ll <- list(rp, rp, rp)
> class(ll[[1]])
[1] "rpart"
> class(ll[[2]])
[1] "rpart"
> class(ll[[3]])
[1] "rpart"

但是,如果我想将模型添加到已经创建的列表中,模型会更改其类别为数据框(data.frame):

> ll <- list(rp)
> ll <- append(ll, rp)
> class(ll[[1]])
[1] "rpart"
> class(ll[[2]])
[1] "data.frame"

这种行为的原因是什么,我该如何将模型添加到列表中?
3个回答

12

Andrie的解决方案:

x <- list(fit1)
x <- list(x, fit2)

不起作用,因为它会生成一个具有listlm组件的list

sapply(x,class)
# [1] "list" "lm"

要实现所需的行为,您需要使用 c 将一个 list 追加到另一个 list 中:

x <- list(fit1)
x <- c(x, list(fit2))
sapply(x,class)
# [1] "lm" "lm"
x <- c(x, list(fit3))
sapply(x,class)
# [1] "lm" "lm" "lm"

5

函数append用于向向量中添加元素。

要向列表中添加元素,请使用list。尝试:

fit1 <- lm(Sepal.Length ~ Sepal.Width, data=iris)
fit2 <- lm(Sepal.Length ~ Petal.Width, data=iris)

x <- list(fit1, fit2)
str(x, max.level=1)

List of 2
 $ :List of 12
  ..- attr(*, "class")= chr "lm"
 $ :List of 12
  ..- attr(*, "class")= chr "lm"

你现在应该有一个lm对象列表:
> class(x[[1]])
[1] "lm"

若要将元素添加到现有列表中,请按以下方式使用list

x <- list(fit1)
x <- list(x, fit2)

2
在幕后,append 仅仅是使用 c(只需在命令行中键入 append 并按 enter 键即可查看其源代码)来实现的。如果你查看 c 的帮助文档,你会在其中的示例中发现有趣的内容(请注意“不要使用”部分)。
我记得最近有一个类似的问题,或者可能是最近在 R 聊天室中讨论过,但我无法回忆起具体是哪个,如果有其他人能指出来就好了。
无论如何,根据你的需求:
ll<-c(ll, list(rp))

如果您坚持使用 append

ll<-append(ll, list(rp))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接