Je remarque un comportement incohérent lors de l'application de la fonction median()
aux données. "Comportement incohérent" signifie généralement que je ne comprends pas quelque chose, alors j'espère que quelqu'un sera prêt à éclaircir cela pour moi.Comportement impair avec median()?
I se rendre compte que certaines fonctions (par exemple, min()
, max()
) convertissent la trame de données dans un vecteur et retourner la valeur correspondante de l'ensemble tandis que df mean()
et sd()
renvoient une valeur pour chaque colonne. Bien qu'un peu confus, ces différences de comportement ne causent pas beaucoup de problèmes puisque la plupart du code se casserait si un scalaire est renvoyé à la place d'un vecteur. Cependant, median()
semble être incohérent. Par exemple:
dat <- data.frame(x=1:100, y=2:101)
median(dat)
Renvoie un vecteur: [1] 50.5 51.5
Mais, parfois, il se brise:
dat2 <- data.frame(x=1:100, y=rnorm(100))
median(dat2)
Retours: [1] NA NA Warning messages: 1: In mean.default(X[[1L]], ...) : argument is not numeric or logical: returning NA 2: In mean.default(X[[2L]], ...) : argument is not numeric or logical: returning NA
Cependant, median(dat2$x)
et median(dat2$y)
à la fois donner le résultat correct.
Voir également les éléments suivants:
dat3 <- data.frame(x=1:100, y=1:100)
dat4 <- data.frame(x=1:100, y=100:199)
Dans ce qui précède, median(dat3)
retours [1] 50.5 NA
tandis que median(dat4)
retours [1] 50.5 149.5
! Je m'attendrais à ce que les deux ou aucun d'entre eux fonctionnent. Donc, je ne comprends pas à quel point la fonction median()
fonctionne.
En outre, des fonctions telles que sd
, mean()
, min()
et max()
tous donnent leurs attendus (si apparemment incompatibles) des résultats dans tous les cas ci-dessus. Je sais que je peux utiliser quelque chose comme sapply(dat2, median)
pour obtenir le résultat nécessaire, mais je me demande pourquoi les dieux R ont choisi d'implémenter ces fonctions de statistiques de base d'une manière qui, au moins en surface, semble incohérente. Je soupçonne que moi, et probablement d'autres néophytes, ne comprenons probablement pas un concept fondamental, et j'apprécierais votre perspicacité.
J'aurais aimé lire R Inferno de plus près. Je suis juste retourné et regardé, et l'auteur déclare: «L'exemple de la médiane avec les bases de données est un problème ... il n'y a pas une méthode de base de données de la médiane, dans ce cas particulier, il obtient la bonne réponse, mais c'est Dans d'autres cas, vous obtenez des réponses bizarres. " (p.54). Je suis maintenant motivé pour donner à R Inferno une bonne lecture solide ce week-end. –