2016-04-25 18 views
1

Rの比較的新しい人として、forループの作成に問題があります。forループから複数のベクトルを出力するR

私は、9000の観測値と25のカテゴリ変数を持つ非常に大きなデータセットを持っています。これは、バイナリデータとあらかじめ作成された階層的クラスタリングに変換されています。今度は、kmodes$withindiffから出力される「クラスタ内単純マッチング距離」を使用してK-Modesクラスタリングを試してエルボープロットを作成します。私はk in 1:8クラスタごとにこれを合計して、エルボープロットを得ることができます。

library(klaR) 
for(k in 1:8) 
{ 
WCSM[k] <- sum(kmodes(data,k,iter.max=100)$withindiff) 
} 
plot(1:8,WCSM,type="b", xlab="Number of Clusters",ylab="Within-Cluster 
Simple-Matching Distance Summed", main="K-modes Elbow Plot") 

私の問題は、kモードからさらに出力したいということです。それぞれについてk in 1:8私はkmodes$clusterによって与えられた各オブジェクトが割り当てられているクラスターを示す整数のベクトルを取得したいと思います。私は、それぞれのループを作成する必要がありますk in 1:8と出力のそれぞれを8つの別々のベクトルに保存します。しかし、私はどのようにそのようなループを行うか分からない。私はちょうど8行のコードを別々に走らせることができますが、それぞれiter.max=10を実行するのに15分かかるので、これをiter.max=100に増やすとループが有効になるように夜間実行する必要があります。

cl.kmodes2=kmodes(data, 2,iter.max=100) 
cl.kmodes3=kmodes(data, 3,iter.max=100) 
cl.kmodes4=kmodes(data, 4,iter.max=100) 
cl.kmodes5=kmodes(data, 5,iter.max=100) 
cl.kmodes6=kmodes(data, 6,iter.max=100) 
cl.kmodes7=kmodes(data, 7,iter.max=100) 
cl.kmodes8=kmodes(data, 8,iter.max=100) 

は最終的に私が調整ランドインデックスを取得することにより、K-モードクラスタリングに階層的バイナリクラスタリングの結果を比較したいです。例えば、階層的クラスタのためk=4で木を切断し、K-モードから4クラスタソリューションにこれを比較する:

dist.binary = dist(data, method="binary") 
cl.binary = hclust(dist.binary, method="complete") 
hcl.4 = cutree(cl.binary, k = 4) 
tab = table(hcl.4, cl.kmodes4$cluster) 
library(e1071) 
classAgreement(tab) 

答えて

0

最良の方法は、名前のリストにあなたのクラスタからの出力を置くことです。

sum(myClusterList[["k.1"]]$withindiff) 

または

0123:
library(klaR) 

myClusterList <- list() 

for(k in 1:8) { 
    myClusterList[[paste0("k.", i)]] <- kmodes(data, i,iter.max=100) 
} 

あなたは、簡単に内容のいずれかを引き出すことができます

sum(myClusterList[[1]]$withindiff) 

将来のRセッションで使用するリストを保存することもできます。?saveを参照してください。

+0

これがうまく機能している限り期待通りにはかかりませんでした。セーブのヒントも非常に便利でした。 – PennyR

0

私はImoに同意し、リストを使用することが最良の解決策です。あなたがそれを行うにはしたくない 場合は、すべての反復で新しいベクトルを作成するために、割り当てを()を使用することができます:

library(klaR) 
for(k in 1:8) { 
    assign(paste("cl.kmodes", k, sep = ""), kmodes(data, k, iter.max = 100)) 
} 
関連する問題