Проблема R при анализе сортировки карт: «Ошибка в hclust (dist (t (data)))» - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь проанализировать некоторые данные, собранные для исследования Сортировка карт .Я хочу использовать R для создания дендрограммы, которая объединит мои результаты в группы карточек, которые участники чаще всего связывают.Я использую метод, предложенный UXBooth , но у меня возникают проблемы с запуском их кода.Это выглядит так:

> compare <- function(x1, x2) {
+     x3 <- x1 + x2
+     ints <- sum(x3 > 1)
+     uno <- sum(x3 > 0)
+     return (ints / uno)
+ }
> 
> getJaccard <- function(data) {
+     l = length(data[1,])
+     jmatrix <- matrix(nrow=l,ncol=l)
+     for (i in 1:l) {
+         for (j in i:l) {
+             s <- compare(data[i], data[,j])
+             jmatrix[i,j] <- s
+             jmatrix[j,i] <- s
+         }
+     }
+     return (jmatrix)
+ }
> 
> cardsort <- function(filename, blocks) {
+     filedata <- read.table(filename, header=T, sep=",")
+     data <- getJaccard(filedata)
+     colnames(data) <- colnames(filedata)
+     hc <- hclust(dist(t(data)), method="ward.D")
+     hc$labels <- colnames(data)
+     plot(hc, main = Sys.time())
+     rect.hclust(hc, k=blocks, border="red")
+ }
> 
> cardsort('C:/Users/Uxxxxxxx/Desktop/GOO-Card-Sort/GOO-Card-Sort-Results-Analysis.csv', 3)

CSV, переданный через функцию cardsort () в конце, представляет собой матрицу данных нашего исследования.См. Google Sheet здесь.

В строке заголовка все 94 карты расположены в столбцах.Каждая строка под заголовком представляет группу, созданную одним из наших участников исследования.

Если в группу включена данная карта, в журнал заносится «1».Если нет, то записывается «0».Имена групп и участников изначально были в первых двух столбцах, но я их вырезал для целей анализа.

Целое число, переданное через функцию cardsort (), - это количество групп, которые я запрашиваю длярезультаты должны быть упорядочены в зависимости от вероятности объединения каждой карты со всеми другими картами.Это то, для чего в конечном итоге предназначен код.

Моя проблема в том, что при запуске кода выдается следующее сообщение:

Error in hclust(dist(t(data)), method = "ward.D") : 
  NA/NaN/Inf in foreign function call (arg 10)
Called from: hclust(dist(t(data)), method = "ward.D")

Я не понимаю, почему это так.происходит, как кто-то, кто плохо знаком с R и просто пытается автоматизировать эту тяжелую задачу анализа.Кажется, в моих данных есть некоторые значения NA / NaN / Inf, но я не могу представить, где они будут?Любой совет будет высоко ценится, спасибо.

...