Я замечаю некоторое противоречивое поведение при применении функции median()
к dataframes. "Непоследовательное поведение" обычно означает, что я что-то не понимаю, поэтому, надеюсь, кто-то захочет прояснить это для меня.
Я понимаю, что некоторые функции (например, 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 решили реализовать эти основные функции статистики таким образом, чтобы, по крайней мере, на поверхности, казалось непоследовательным. Я подозреваю, что я и, возможно, другие неофиты, вероятно, не понимают фундаментальную концепцию, и я был бы признателен вам за понимание.