J'ai rencontré un problème étrange où une fonction d'agrégat agit bizarrement si je l'appelle en fonction personnalisée. Il semble que la fonction de sous-ensemble soit totalement dépassée:créer une fonction et un sous-ensemble de trame de données ne fonctionne pas dans la fonction d'agrégat
Pour vous donner une idée du problème, je vais le décomposer en deux parties. 1. sans fonction personnalisée
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)
la valeur de dG:
D A B
2 bike 78
3 bike 56
1 carr 23
3 carr 44
Quelle est exactement la façon dont il devrait être.
Mais 2. Avec la fonction personnalisée:
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)
La réponse est:
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
Maintenant, je veux savoir pourquoi il devient "camion" en fonction d'agrégation? Bien que dans la fonction agrégée j'ai utilisé des données datam_subset qui a été un sous-ensemble et contient uniquement des données sur "carr" et "vélo".
Peut-être qu'il me manque quelque chose de très basique. Sera reconnaissant pour votre aide. Merci
vous donnez en entrée à votre fonction 'rtk' les colonnes réelles de votre datafra d'origine moi au lieu de simplement les noms de colonnes.Donc, le 'subset' fonctionne, mais le' aggregate' est fait sur les colonnes de 'c'. – Lamia
comme personne ne l'a vraiment mentionné. http://stackoverflow.com/questions/9860090/why-is-better-than-subset donne quelques réflexions sur l'utilisation du sous-ensemble dans une fonction. Aussi l'agrégat a un argument de sous-ensemble qui peut rendre les choses plus faciles – user20650
* datam * param n'est jamais utilisé dans la fonction même si vous passez 'c'into – Parfait