как исправить "Ошибка в do_one (nmeth): NA / NaN / Inf при вызове сторонней функции (arg 1)" - PullRequest
0 голосов
/ 01 июня 2019

У меня есть матрица метеостанций и среднего количества осадков, на которых я хочу запустить алгоритм кластеризации - но я получаю ошибку - любая помощь очень приветствуется, пожалуйста.

     station        avg               
[1,] "aberporth"    "12.6366666666667"
[2,] "armagh"       "12.8739130434783"
[3,] "ballypatrick" "12.3982857142857"
[4,] "bradford"     "12.3962441314554"
[5,] "braemar"      "12.025641025641" 
[6,] "camborne"     "12.2855855855856"

при запуске этого кода:

 k2<-kmeans(na.omit(C),centers = 2,nstart=25)

Я получаю это сообщение об ошибке:

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

1 Ответ

1 голос
/ 01 июня 2019

Есть несколько ошибок:

  1. Столбец "avg" - это строка, но она должна быть числовой переменной.
  2. Kmeans вычисляет евклидово расстояние, которое может быть сделано только с числовыми переменными. Вы не можете включить переменную "Station" в свой анализ.
  3. Используйте data.frame вместо матрицы, поскольку в вашем примере матрица может обрабатывать только один тип данных (символ).

Вот как вы будете выполнять кластеризацию Kmeans:

df <- data.frame(
  station = c("aberporth", "armagh", "ballypatrick", "bradford", "braemar", "camborne"),
  avg = c("12.6366666666667", "12.8739130434783", "12.3982857142857", "12.3962441314554",
          "12.025641025641", "12.2855855855856")
)

    df$avg <- as.numeric(as.character(df$avg))

    kmeans(df[,2], 2, nstart=20)


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

Cluster means:
      [,1]
1 12.75529
2 12.27644

Clustering vector:
[1] 1 1 2 2 2 2

Within cluster sum of squares by cluster:
[1] 0.02814292 0.09218318
 (between_SS / total_SS =  71.8 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"        
[8] "iter"         "ifault"  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...