将模型附加到列表中

时间:2011-10-09 20:03:01

标签: r

我在创建模型列表时遇到问题。 假设我已经创建了模型:

> rp <- rpart(V41 ~ ., data=learnData, method="class")

如果我直接创建列表,那就OK:

> 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 个答案:

答案 0 :(得分:6)

Andrie的解决方案:

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

不起作用,因为它会生成list listlm个组件:

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

您需要使用listlist附加c以获得所需的行为:

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"

答案 1 :(得分:4)

函数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 :(得分:2)

在场景后面,追加只是使用c(只需输入append并输入命令行查看其源代码)。如果您查看c的帮助,您会在示例中找到有趣的内容(请查看“请勿使用”部分)。

我从最近的另一个问题中记得这个,或者也许是最近在R聊天,但是不记得它是什么,所以如果其他人可以指出它?

无论如何,为了你想要的:

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

或者如果您坚持使用append

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