2013-03-08 89 views
4

在處理問題時,我注意到一些有趣的事情。我不知道到底發生了什麼,但發生了一些我並不期望發生的事情。這可能是我犯了一個錯誤,但讓我用一個例子開始:R分位數函數的行爲

x <- rnorm(100) 
y <- x[ x > quantile(x, 0.1) ] 
z <- x[ x > quantile(x, c(0.1, 0.2)) ] 
a <- x[ x > quantile(x, c(0.1, 0.2, 0.3)) ] 

我們得到三個不同的結果,但如何interprete這些結果。這些是使用的限制嗎?

更新: 我想我問的是錯誤的問題。我們如何解釋以下內容:

> x <- rnorm(100) 
> length(x[ x > quantile(x, 0.1) ]) 
[1] 90 
> length(x[ x > quantile(x, 0.2) ]) 
[1] 80 
> length(x[ x > quantile(x, c(0.1, 0.2)) ]) 
[1] 85 
+1

我的答案也是你編輯的解釋。 – joran 2013-03-08 16:38:07

回答

10

您對>和R的回收行爲感到困惑。當quantile返回多於1個值(如在最後兩個示例中那樣)時,它將這些矢量回收成與x相同的長度,以便通過>進行矢量化比較。

所以,在最後兩個實施例中,它從quantile一遍一遍重複2倍或3的值,直到所得到的載體是相同的長度x,並將它們與它們逐元素與>

編輯

也許我的解釋不夠清楚。在編輯的最後一行,x > quantile(x, c(0.1, 0.2)) r是x第一元件與0.1分位數,的x與0.2分位數的第二元件,的x與0.1分位數的第三元件,的x與0.2第四元件比較分位數等。得到它了? :)

+0

是的,您的答案編輯現在完全有意義。很高興知道。謝謝。 – Sam 2013-03-08 18:10:32