2016-04-29 5 views
2

Hallo Ich benutze das Paket partykit und seine Funktion cforest, um ein Modell zu passen. Ich kann auch predict verwenden, um basierend auf einem mehrzeiligen Datenrahmen vorherzusagen. Ich kann jedoch nicht auf einem Datenrahmen mit einer Zeile vorhersagen.cforest: Fehler bei der Vorhersage, wenn newdata einreihiger Datenrahmen ist

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),]) 

Die Fehlermeldung ist:

vorherzusagen (obj, newdata = df [5]) Fehler bei Vektor (mode = "list", Länge = NcoI (w)): invalid " Länge 'Argument

Antwort

3

Es scheint einen Fehler im Code zu geben, wenn Sie versuchen, nur eine Zeile vorherzusagen. Die Funktion, die aufgerufen wird, ist partykit:::predict.cforest. Und es gibt eine Linie dort in die sagt,

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

aber es sollte

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

So können Sie entweder es immer nennen mit einer mehr als eine Zeile, oder Sie können die Funktion hacken (dies ist sehr sehr hacky und hängt von Zeilennummern in der Funktion, so dass es in Zukunft brechen - mit partykit_1.0-5 getestet) wie so

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 

Jetzt haben wir eine neue Funktion, die den Fall behandeln soll eine Reihe richtig

+2

Eine noch bessere Lösung ist es, einen der 'Partykit'-Autoren zu kontaktieren (nicht jeder sieht die ganze Zeit SO) und bittet sie, Ihren Fix hinzuzufügen. Dieser Autor hat es jetzt getan und die fixe Version wird bald bei R-Forge verfügbar sein: https://R-forge.R-project.org/R/?group_id=261 Danke, dass du das entdeckt hast und die Reparatur vorgeschlagen hast! –

Verwandte Themen