Как исправить: ошибка в do_one(nmeth): na/nan/inf в вызове сторонней функции (arg 1)


Одна ошибка, с которой вы можете столкнуться в 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: более длинная длина объекта не кратна более короткой длине объекта

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.