2016-04-29 6 views
2

Здравствуйте, я использую пакет partykit и его функцию cforest, чтобы соответствовать модели. Я также могу использовать predict для прогнозирования на основе многострочного фрейма. Однако я не могу предсказать на кадре данных с одной строкой.cforest: ошибка в предсказании, когда newdata является однострочным файлом данных

require('partykit') 
y <- matrix(rnorm(500*1),nrow=500,ncol=1) 
x <- matrix(rnorm(500*6),nrow=500,ncol=6) 
df <- data.frame(y=y,x=x) 
obj = cforest(y ~ ., data= df) 

#works 
predict(obj,newdata=df) 

# doesn't work 
predict(obj,newdata=df[5,]) 

#this works 
predict(obj,newdata=df[c(5,6),]) 

Сообщение об ошибке:

предсказывают (OBJ, NewData = DF [5,]) Ошибка в векторе (режим = "список", длина = Ncol (ж)): недействительным ' length 'аргумент

ответ

3

Вроде бы ошибка в коде при попытке предсказать только одну строку. Вызывается функция, которая называется partykit:::predict.cforest. И есть линия там что говорит

return(pw[, match(fnewdata, ids)]) 

, но это должно быть

return(pw[, match(fnewdata, ids), drop=FALSE]) 

Таким образом, вы можете всегда называть его одним более чем в одной строке, или вы можете взломать функцию (это очень , очень Hacky и зависит от числа строк в функции, так что может сломаться в будущем - испытанная с partykit_1.0-5) как так

mypredict <- partykit:::predict.cforest 
body(mypredict)[[c(13,3,3,3,8)]] <- quote(return(pw[, match(fnewdata, ids), drop=FALSE])) 
mypredict(obj, newdata=df[6,]) 
#   5 
# 0.04755628 

Теперь у нас есть новая функция, которая должна обрабатывать случай один ряд правильно

+2

Еще лучшее решение - обратиться к одному из авторов 'partykit' (не все все время наблюдают за СО) и попросить их добавить исправление. Этот автор сделал это сейчас, и исправленная версия будет доступна в R-Forge в ближайшее время: https://R-Forge.R-project.org/R/?group_id=261 Спасибо, что заметили это и предложили исправление! –

 Смежные вопросы

  • Нет связанных вопросов^_^