Я заметил некоторые противоречивые действия при применении функции median()
к кадрам данных.«Непоследовательное поведение» обычно означает, что я чего-то не понимаю, поэтому я надеюсь, что кто-то захочет прояснить это для меня.
Я понимаю, что некоторые функции (например, min()
, max()
) преобразуют кадр данных в вектор и возвращают соответствующее значение для всего df, тогда как mean()
и sd()
возвращают значение для каждогоколонка.Хотя это немного сбивает с толку, эти различия в поведении не вызывают много проблем, так как большая часть кода сломается, если вместо вектора возвращается скаляр.Однако median()
кажется несовместимым.Например:
dat <- data.frame(x=1:100, y=2:101)
median(dat)
Возвращает вектор: [1] 50.5 51.5
Но иногда он ломается:
dat2 <- data.frame(x=1:100, y=rnorm(100))
median(dat2)
Возвращает: [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
Однако median(dat2$x)
и median(dat2$y)
оба дают правильный результат.
Также учтите следующее:
dat3 <- data.frame(x=1:100, y=1:100)
dat4 <- data.frame(x=1:100, y=100:199)
В приведенном выше примере median(dat3)
возвращает [1] 50.5 NA
, а median(dat4)
возвращает [1] 50.5 149.5
!Я ожидаю, что оба или ни один из них не сработает.Итак, я явно не понимаю, как работает функция median()
.
Кроме того, такие функции, как sd
, mean()
, min()
и max()
, все дают ожидаемые результаты (если кажутся несовместимыми).) результаты во всех вышеупомянутых случаях.
Я знаю, что могу использовать что-то вроде sapply(dat2, median)
, чтобы получить необходимый результат, но мне интересно, почему боги R решили реализовать эти основные функции статистики таким образом, чтобыПо крайней мере, на первый взгляд кажется противоречивым.Я подозреваю, что я и, возможно, другие неофиты, вероятно, не понимаем какой-то фундаментальной концепции, и я был бы признателен за ваше понимание.