修正方法: do_one(nmeth) のエラー: 外部関数呼び出し (引数 1) の na/nan/inf


R で発生する可能性のあるエラーは次のとおりです。

 Error in do_one(nmeth): NA/NaN/Inf in foreign function call (arg 1)

このエラーは、 R で K-means クラスタリングを実行しようとしたが、使用しているデータ フレームに 1 つ以上の欠損値がある場合に発生します。

このチュートリアルでは、このエラーを修正する方法を正確に説明します。

エラーを再現する方法

R に次のデータ フレームがあり、2 行目に欠損値があるとします。

 #create data frame
df <- data. frame (var1=c(2, 4, 4, 6, 7, 8, 8, 9, 9, 12),
                 var2=c(12, 14, 14, 8, 8, 15, 16, 9, 9, 11),
                 var3=c(22, NA, 23, 24, 28, 23, 19, 16, 12, 15))

row. names (df) <- LETTERS[1:10]

#view data frame
df

  var1 var2 var3
At 2 12 22
B 4 14 NA
C 4 14 23
D 6 8 24
E 7 8 28
F 8 15 23
G 8 16 19
H 9 9 16
I 9 9 12
D 12 11 15

kmeans()関数を使用して、このデータ フレームに対して k-means クラスタリングを実行しようとすると、エラーが発生します。

 #attempt to perform k-means clustering with k = 3 clusters
km <- kmeans(df, centers = 3 )

Error in do_one(nmeth): NA/NaN/Inf in foreign function call (arg 1)

エラーを修正する方法

このエラーを修正する最も簡単な方法は、単にna.omit()関数を使用して、欠損値のある行をデータ フレームから削除することです。

 #remove rows with NA values
df <- na. omitted (df)

#perform k-means clustering with k = 3 clusters
km <- kmeans(df, centers = 3)

#view results
km

K-means clustering with 3 clusters of sizes 4, 3, 2

Cluster means:
  var1 var2 var3
1 5.5 14.250000 21.75000
2 10.0 9.666667 14.33333
3 6.5 8.000000 26.00000

Vector clustering:
ACDEFGHIJ
1 1 3 3 1 1 2 2 2 

Within cluster sum of squares by cluster:
[1] 46.50000 17.33333 8.50000
 (between_SS / total_SS = 79.5%)

Available components:

[1] "cluster" "centers" "totss" "withinss" "tot.withinss"
[6] "betweenss" "size" "iter" "ifault"

欠損値を含む行をデータ フレームから削除すると、K 平均法クラスタリング アルゴリズムが正常に実行されることに注意してください。

ボーナス: R での K 平均法クラスタリングの完全なステップバイステップ ガイド

追加リソース

R で修正する方法: 強制によって導入された NA
R で修復する方法: 範囲外のインデックス
R での修正方法: 長いオブジェクトの長さが短いオブジェクトの長さの倍数ではありません

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です