cforest:当newdata是一行数据帧时预测出错
您好,我正在使用软件包cforest:当newdata是一行数据帧时预测出错,r,tree,predict,party,R,Tree,Predict,Party,您好,我正在使用软件包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
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),])
require('partykit'))
y当您试图预测一行时,代码中确实出现了一个bug。正在调用的函数是partykit:::predict.cforest
。里面有一句话说
return(pw[, match(fnewdata, ids)])
但应该是这样
return(pw[, match(fnewdata, ids), drop=FALSE])
因此,您可以总是用一行以上的行调用它,或者您可以对函数进行黑客攻击(这非常非常黑客攻击,并且取决于函数中的行号,因此将来可能会中断—使用partykit_1.0-5
进行测试),就像这样
mypredict一个更好的解决方案是联系一位partykit
作者(并非所有人都一直在观看),并要求他们添加您的修复程序。这位作者现在已经这样做了,修复版本将很快从R-Forge获得:感谢您发现这一点并建议修复!
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