Одна ошибка, с которой вы можете столкнуться в R:
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
Эта ошибка возникает, когда вы пытаетесь выполнить кластеризацию k-средних в R , но в используемом фрейме данных есть одно или несколько отсутствующих значений.
В этом руководстве рассказывается, как именно исправить эту ошибку.
Как воспроизвести ошибку
Предположим, у нас есть следующий фрейм данных в R с отсутствующим значением во второй строке:
#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
A 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
J 12 11 15
Если мы попытаемся использовать функцию kmeans() для выполнения кластеризации k-средних для этого фрейма данных, мы получим ошибку:
#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.omit(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
Clustering vector:
A C D E F G H I J
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-средних работает успешно, как только мы удаляем строки с отсутствующими значениями из фрейма данных.
Бонус: полное пошаговое руководство по кластеризации методом k-средних в R.
Дополнительные ресурсы
Как исправить в R: NA, представленные Coercion
Как исправить в R: нижний индекс выходит за пределы
Как исправить в R: более длинная длина объекта не кратна более короткой длине объекта