Что означает аргумент «который» не является логическим в FactoMineR MCA?

Я пытаюсь запустить MCA для таблицы данных, используя FactoMineR. Он содержит только числовые столбцы 0/1, а его размер составляет 200 000 * 20.

require(FactoMineR)
result <- MCA(data[, colnames, with=F], ncp = 3)

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

Ошибка, в которой (unlist (lapply (listModa, is.numeric))): аргумент «который» не является логическим

Я действительно не знал, что делать с этой ошибкой. Затем я попытался превратить каждый столбец в символ, и все заработало. Я подумал, что это может быть полезно кому-то еще, и, возможно, кто-то сможет объяснить мне ошибку;)

Ваше здоровье


person VeilleData    schedule 14.12.2015    source источник


Ответы (6)


Трудно сказать без дополнительных данных, но вы можете сделать следующее:

  • Найдите функцию, в которой произошла ошибка (через traceback()),
  • Установите точку останова и отладьте ее:

    trace(tab.disjonctif, browser)
    

Я сделал следующее (в автономном режиме), чтобы найти имя tab.disjonctif:

  • Пакет найден на зеркале CRAN на GitHub.
  • Поиск конкретного выражения, выдающего ошибку
person krlmlr    schedule 14.12.2015

Являются ли классы ваших переменных характерными или факторными? У меня была эта проблема. Мое решение состояло в том, чтобы изменить переменные al на factor.

#my data.frame was "aux.da"
i=0
while(i < ncol(aux.da)){
  i=i+1  aux.da[,i] = as.factor(aux.da[,i])
}
person marques    schedule 03.10.2016

Я только вчера начал изучать R, но ошибка возникает из-за того, что MCA предназначен для categorical data, поэтому ваши данные не могут быть числовыми. Затем, если быть более точным, перед MCA создается «таблица дизъюнктива» (извините, я не знаю слова по-английски: полная дизъюнктивная матрица). Итак, FactomineR использует эту функцию:

https://github.com/cran/FactoMineR/blob/master/R/tab.disjonctif.R

Где я думаю, что он ищет категориальные значения, которые могут быть сопоставлены с числовым значением (например, Y = 1, N = 0).

Для других ; будьте осторожны: для R категориальные данные относятся к типу factor, поэтому even if you have characters you could get this error.

person Khaled    schedule 07.04.2016

Чтобы построить @marques, @Khaled и @Pierre Gourseud:

Да, изменение формата ваших переменных на фактор должно устранить сообщение об ошибке, но вы не должны изменять формат числовых данных на фактор, если предполагается, что это непрерывные числовые данные. Вместо этого, если у вас есть как непрерывные, так и категориальные переменные, попробуйте запустить факторный анализ для смешанных данных (FAMD) в том же пакете FactoMineR.

Если вы пойдете по пути FAMD, вы можете изменить формат только столбцов категориальных переменных, чтобы учесть это:

data[,c(3:5,10)] <- lapply(data[,c(3:5,10)] , factor) (при условии, что номера столбцов 3,4,5 и 10 необходимо изменить).

person pfadenhw    schedule 03.02.2021

Это не будет работать только для числовых переменных. Если у вас есть только числовое значение, используйте PCA. В противном случае добавьте факторную переменную в свой фрейм данных. Похоже, что для вашего случая вам нужно изменить свои переменные на двоичные множители.

person Maja    schedule 18.04.2021

Та же проблема, и изменение фактора также не решило мой ответ, потому что я поместил каждую переменную в качестве дополнительной.

Сначала я преобразовал все свои числовые данные в коэффициенты:

Xfac = factor(X[,1], ordered = TRUE)
for (i in 2:29){
  tfac = factor(X[,i], ordered = TRUE)
  Xfac = data.frame(Xfac, tfac)
}
colnames(Xfac)=labels(X[1,])

Тем не менее, это не сработает. Но моя вторая проблема заключалась в том, что я включил КАЖДЫЙ фактор в качестве дополнительной переменной! Итак, эти:

MCA(Xfac, quanti.sup = c(1:29), graph=TRUE)
MCA(Xfac, quali.sup = c(1:29), graph=TRUE)

Будет генерировать ту же ошибку, но эта работает:

MCA(Xfac, graph=TRUE)

Отсутствие преобразования данных в факторы также породило проблему.

Я опубликовал тот же ответ в связанной теме: https://stackoverflow.com/a/40737335/7193352

person Pierre Gourseaud    schedule 22.11.2016