將median()
函數應用於數據框時,我注意到一些不一致的行爲。 「不一致的行爲」通常意味着我不瞭解某些東西,所以我希望有人願意爲我解決這個問題。奇怪的行爲與中位數()?
我知道一些功能(例如,min()
,max()
)轉換數據幀到載體和用於同時mean()
整個DF返回對應的值和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神選擇以至少在表面上看起來不一致的方式來實現這些核心統計函數。我懷疑我和其他新手可能不瞭解某些基本概念,我很感激你的洞察力。
我希望我已經更仔細地閱讀過R地獄。我剛回去看了看,作者說:「帶有數據框的中位數的例子是一個麻煩的例子......沒有數據框架的中位數方法,在這種情況下,它得到了正確的答案,但那是在其他情況下,你會得到奇怪的答案。「 (第54頁)。我現在有動力讓R煉獄在這個週末有一個很好的,堅實的閱讀。 – 2011-05-06 03:29:20