R предсказывает, что NA не разрешены в назначениях с индексами

Я хотел бы использовать функцию прогнозирования. У меня есть два набора фреймов данных (один для калибровки, второй для проверки). Вот два набора данных:

head(df_calib)
#      A   B   C   D       COND
#1     0  11  11   9          A    
#2     5   2   5  19          A    
#3     4   3  10  14          A    
#4    18  13   0   0          B    
#5    22   9   0   0          C    
#6     4   9   2  16          B    

head(df_valid)
#     A   B   C   D       COND    
#1   14  16   1   0          A    
#2   20   9   2   0          A    
#3   16   6   9   0          A    
#4   16   2  11   2          A    
#5    4   8  14   5          C    
#6    4   3  13  11          C    

В своей программе я сначала определяю прогноз, а затем

library(mda)
discrim <- fda(COND~ ., data=df_calib)
pred <- predict(discrim,df_valid)

discrim вроде работает нормально (если я рисую discrim), но когда я вычисляю pred, я получаю следующее сообщение:

pred <- predict(discrim,df_valid)

Ошибка в mindist [l] ‹- ndist [l]: NA нельзя использовать в назначениях с индексами.

Не могли бы вы помочь мне решить эту проблему?

Вот дополнительная информация о данных:

formula(discrim) предусматривает, что:

COND ~ A + B + C + D
attr(,"variables")
#list(COND, A, B, C, D)
attr(,"factors")
#     A B C D
#COND 0 0 0 0
#A    1 0 0 0
#B    0 1 0 0
#C    0 0 1 0
#D    0 0 0 1
attr(,"term.labels")
#[1] "A" "B" "C" "D"
attr(,"order")
#[1] 1 1 1 1
attr(,"intercept")
#[1] 1
attr(,"response")
#[1] 1
attr(,"predvars")
#list(COND, A, B, C, D)
attr(,"dataClasses")
# COND         A         B         C         D 
#"character"   "numeric"   "numeric"   "numeric"   "numeric" 

Информация о df_valid и df_calib:

str(df_valid)
#'data.frame':  26 obs. of  5 variables:
# $ A       : num  0 0 0 0 8 15 17 19 18 14 ...
# $ B       : num  17 15 8 7 2 2 3 5 5 4 ...
# $ C       : num  2 2 2 2 14 12 6 3 2 1 ...
# $ D       : num  12 14 21 22 7 2 5 4 6 12 ...
# $ COND: chr [1:26(1d)] "A" "A" "A" "A" ...

str(df_calib)
#'data.frame':  520 obs. of  5 variables:
# $ A       : num  0 5 4 18 22 4 1 9 12 15 ...
# $ B       : num  11 2 3 13 9 9 3 1 3 15 ...
# $ C       : num  11 5 10 0 0 2 11 5 0 1 ...
# $ D       : num  9 19 14 0 0 16 16 16 16 0 ...
# $ COND: chr [1:520(1d)] "A" "A" "A" "B" ...

person Titosh    schedule 02.12.2015    source источник
comment
Предыдущий пост здесь была такая же проблема. Это может вам помочь   -  person etienne    schedule 02.12.2015
comment
Что возвращает formula(descrim)?   -  person Roman Luštrik    schedule 02.12.2015
comment
проверьте это сообщение, это может быть полезно.   -  person Prradep    schedule 02.12.2015
comment
@Prradep: это сообщение, которое я уже упоминал   -  person etienne    schedule 02.12.2015
comment
@etienne да, я заметил. упс, страница не обновлялась!   -  person Prradep    schedule 02.12.2015
comment
@ Этьен и Пррадеп, спасибо за вашу помощь, но я не знаю, что он имеет в виду, говоря о нормализации данных.   -  person Titosh    schedule 02.12.2015
comment
@ Роман, спасибо, я поставил то, что получил, в конце вопроса.   -  person Titosh    schedule 02.12.2015
comment
Каковы структуры (str()) обеих переменных? Попробуйте отредактировать свой вопрос, чтобы сделать его красивее.   -  person Roman Luštrik    schedule 02.12.2015
comment
прости @Roman, это мой первый пост. Я добавил результаты str (). Спасибо   -  person Titosh    schedule 02.12.2015
comment
COND должен быть фактором, а не характером ...   -  person Cath    schedule 02.12.2015
comment
@CathG Я думаю, проблема еще и в том, что COND - это таблица, вложенная в список (data.frame). Интересно, что class(df_valid$COND) даст?   -  person Roman Luštrik    schedule 02.12.2015
comment
@ RomanLuštrik, я ненавижу эти вложенные штуки ...   -  person Cath    schedule 02.12.2015
comment
@Roman класс (df_valid $ COND) - это массив. Спасибо   -  person Titosh    schedule 02.12.2015


Ответы (1)


Спасибо @CathG и @Roman. Проблема заключалась в определении COND, которое должно быть фактором, а не символом.

person Titosh    schedule 02.12.2015