Я пытаюсь проанализировать некоторые данные, собранные для исследования Сортировка карт .Я хочу использовать 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, но я не могу представить, где они будут?Любой совет будет высоко ценится, спасибо.