Как сравнить логические векторы в R

У меня есть вектор v, и я хочу найти все те элементы, которые имеют значения от 4 до 7. v = c(1:9)

# indices of elements with values larger than 4
which(v > 4)
# indices of elements with values smaller than 7
which(v < 7)

v>4 и v<7 дают логические векторы, которые я хотел бы объединить. Я пробовал следующее, что не сработало для меня,...

# combination?
matching = which(v>4 && v<7)  # does not work

Как я могу применить логическую операцию к двум логическим векторам, которая даст мне результирующий вектор?


person R_User    schedule 09.11.2012    source источник


Ответы (1)


Используйте &, а не &&. R отличается от других языков тем, что & — это не побитовое and, а логический оператор.

&& оценивает только первый элемент каждого вектора:

«&» и «&&» обозначают логическое И, а «|» и «||» обозначают логическое ИЛИ. Более короткая форма выполняет поэлементные сравнения почти так же, как арифметические операторы. Более длинная форма оценивает слева направо, исследуя только первый элемент каждого вектора. Оценка продолжается только до тех пор, пока не будет определен результат. Более длинная форма подходит для программирования потока управления и обычно предпочтительнее в предложениях «если».

Подробнее см. ?"&&".

person January    schedule 09.11.2012
comment
Хороший ответ, +1. Вы можете указать, откуда взят цитируемый текст: со страницы справки на &, доступ к которой можно получить с помощью ?"&". Я смотрю на это по крайней мере раз в неделю, так как я никогда не могу их правильно понять... - person Stephan Kolassa; 09.11.2012