2

您好,我正在使用包partykit及其功能cforest来拟合模型。我还可以使用predict基于多行数据帧的预测。但是,我无法预测只有一行的数据框。

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(w)):无效的“长度”参数

4

1 回答 1

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

现在我们有一个新函数可以正确处理一行的情况

于 2016-04-29T14:33:01.383 回答