Ich habe in seltsame Problem, wo eine Funktion Aggregat wirkt seltsam, wenn ich es in benutzerdefinierten Funktion aufrufen. Es scheint die Teilmengenfunktion völlig zu übersteuern:Erstellen einer Funktion und Teilmenge von Datenrahmen funktioniert nicht in Aggregatfunktion
Um Ihnen zu geben, was das Problem ist, werde ich es in zwei Teilen brechen. 1. ohne benutzerdefinierte Funktion
c<- data.frame(A = c("carr","bike","truck","carr","truck","bike","bike","carr","truck","carr","truck","truck","carr","truck","truck"),
B = c(10,20,30,23,45,56,78,44,10,20,30,10,20,30,67),
D = c(1,2,3,1,2,3,2,3,2,3,2,2,3,2,1))
c_subset<- subset(c,(A=="carr")|(A=="bike"))
dg<- aggregate(B ~ D + A ,c_subset,max)
der Wert dg ist:
D A B
2 bike 78
3 bike 56
1 carr 23
3 carr 44
was genau das ist, wie es sein sollte.
Aber 2. Mit benutzerdefinierten Funktion:
rtk <- function(datam,inc_coll,inc_vall,lb,ld){
datam_subset <- subset(c,inc_coll %in% inc_vall)
dg1<- aggregate(lb ~ ld + inc_coll,datam_subset,max)
return(dg1)
}
c_ans <- rtk(c,c$A,c("carr","bike"),c$B,c$D)
Die Antwort lautet:
ld inc_coll lb
2 bike 78
3 bike 56
1 carr 23
3 carr 44
1 truck 67
2 truck 45
3 truck 30
Jetzt möchte ich wissen, warum es "truck" in Aggregatfunktion zu bekommen? Obwohl in Aggregatfunktion habe ich Daten datam_subset verwendet, die eine Teilmenge war und nur Daten auf "Carr" und "Bike" enthält.
Vielleicht fehlt mir etwas sehr einfaches. Seid dankbar für deine Hilfe. Dank
Sie als Eingabe für Ihre Funktion geben 'rtk' die tatsächlichen Spalten Ihrer ursprünglichen datafra ich statt nur Spaltennamen.So funktioniert die "Teilmenge", aber dann wird das "Aggregat" auf den Spalten von "c" ausgeführt. – Lamia
wie niemand es wirklich erwähnt hat. http://stackoverflow.com/questions/9860090/why-is-better-than-subset gibt einige Gedanken über die Verwendung von Teilmenge in einer Funktion. Auch Aggregat hat ein Subset-Argument, das die Dinge leichter machen kann – user20650
* Datam * Param wird nie innerhalb der Funktion verwendet, obwohl Sie 'c'into übergeben – Parfait