R中“分位数”函数的行为

时间:2013-03-08 16:18:39

标签: r quantile

在处理问题时,我发现了一些有趣的东西。我不知道到底发生了什么,但有些事情发生了,我没想到会发生。我可能犯了一个错误,但让我先举一个例子:

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 ) ) ]

我们得到三个不同的结果,但是如何解释这些结果。这些是使用的限制吗?

更新: 我想我问的是错误的问题。我们如何解释以下内容:

> 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 个答案:

答案 0 :(得分: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的第三个元素x 1}}具有0.1分位数,{{1}}的第4个元素具有0.2分位数,依此类推。得到它了? :)