Поведение "квантильной" функции в 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 ) ) ]
Мы получаем три разных результата, но как их интерпретировать. Это ли ограничения, которые используются?
ОБНОВЛЕНИЕ: я думаю, что задаю неправильный вопрос. Как мы можем объяснить следующее:
> 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 ответ
Вы смущены >
и поведение R по переработке. когда quantile
возвращает более 1 значения (как в последних двух примерах), он перезагружает эти векторы, чтобы иметь ту же длину, что и x
чтобы сделать векторизованное сравнение через >
,
Таким образом, в последних двух примерах он повторяет 2 или 3 значения из quantile
снова и снова, пока результирующий вектор не станет такой же длины, как x
и они сравнивают их поэлементно с >
,
редактировать
Может быть, мое объяснение не было достаточно ясным. В последней строке вашего редактирования, x > quantile( x, c( 0.1, 0.2 ) )
R сравнивает первый элемент x
с квантилем 0,1, второй элемент x
с квантилем 0,2, третий элемент x
с квантилем 0,1, 4-й элемент x
с квантиль 0,2 и так далее. Понял?:)