2016-03-21 3 views
-3

私は数値のリストを持っています。元のリストの2つの連続する要素の違いからなる新しいリストを計算する必要があります。 私はこのコードを持っている:2つの連続した要素の間の差分を抽出する

wss <- (nrow(dat)-1)*sum(apply(dat,2,var)) 
    for (i in 2:15) wss[i] <- sum(kmeans(dat, 
             centers=i)$withinss) 
    plot(1:15, wss, type="b", xlab="Number of Clusters", 
     ylab="Within groups sum of squares") 

    # choose optimal k where sos derivative is large for the first time 
diff <- lapply(wss, diff) 

ので、私の元のリストは

> dput(wss) 
c(4155212952468.46, 4021505707879.36, 4017356406677.14, 4015231535838.63, 
4013350949497.91, 17067610483.738, 17023281391.9182, 4013258218594.64, 
14454798910.9291, 16989216167.6064, 14860266330.575, 14480295584.8302, 
14506662229.3596, 14289181733.1553, 14283121461.9347) 

WSSで、結果リストに私が最初の要素が 4155212952468.46であろうと期待される - 4021505707879.36 第二の要素 4021505707879.36だろう - 4017356406677.14 など 助けを歓迎します

+1

正しい用語を使用してください。あなたが持っているものはベクトルであり、リストではありません。 – Roland

答えて

0

あなたはcです単純な使用

diff(wss) 

これは違いのベクトルを返します。

あなたが間違ったことを説明します。 lapplyをリスト上で使用し、リスト内の各要素の関数を評価する必要があります。これは、i)あなたがリストを持っていない、ii)連続した2つの要素と使用した方法の違いが必要な場合、リストであっても、関数diffに1つだけを提供する

+1

いいえ、配列ではなくベクトルを返します。 – Roland

関連する問題