Странная векторная фильтрация в R. Пожалуйста, объясните - PullRequest
1 голос
/ 21 января 2020

При выполнении следующих команд

x <- c(1:10)
x

y <- c(1:35)
y

res <- y [x <= 5]
res

Результат выглядит следующим образом:

 [1]  1  2  3  4  5  6  7  8  9 10
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35
 [1]  1  2  3  4  5 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35

Не могли бы вы объяснить, как отфильтровывались числа 16:20 и 25:30? Также направьте меня на ресурс, где я могу узнать больше об этом.

1 Ответ

1 голос
/ 21 января 2020

Логический вектор возвращается на length из 'у', поскольку один из них на length больше другого. Если мы rep выдадим лицензию, это даст тот же результат, что и в случае ОП

rep(x <= 5, length.out = length(y))
#[1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
#[23]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

y[rep(x <= 5, length.out = length(y))]
#[1]  1  2  3  4  5 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35

y[x <= 5]
#[1]  1  2  3  4  5 11 12 13 14 15 21 22 23 24 25 31 32 33 34 35
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...