2011-10-09 10 views
7

モデルのリストを作成する際に問題があります。仮定 私が作成したモデル:私はストレートのリストを作成していた場合リストにモデルを追加する

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

、OKのthats:

> 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" 

は、この動作の理由は何だとどのように私はリストするためにモデルを追加することができますか?

答えて

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を使用します。シーンの背後に

​​
2

を追加c(単にappendと入力し、コマンドラインに入力してソースコードを表示します)を使用するだけです。 cのヘルプを確認すると、そこにあるサンプルの中で興味深いものが見つかります(「使用しない」の部分をチェックしてください)。

これは最近の他の質問から覚えていますか、または最近Rチャットであ​​ったかもしれませんが、誰がそれを指し示すことができるかを思い出すことはできません。いずれの場合においても

、あなたが望むもののために:

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

か、appendを使用して主張する場合:

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

Andrieのソリューション:

​​

は動作しませんので、 listlist、となりますのコンポーネント:

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

希望の動作を取得するためにcを使用してlistlistを追加する必要があります。

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" 
関連する問題