Код, который доставит ожидаемый ответ на неявный вопрос в вашем первом предложении:
1 %in% 2:4
[1] FALSE
h=1
h %in% 1:2
[1] TRUE
Оператор "==" неявно генерирует диапазон (или вектор альтернатив) излогическое соединение.Он считается «оператором сравнения» и является «универсальным», что означает, что методы могут быть разными для разных типов данных.Они также векторизованы (с действующими неявными правилами повторного использования), поэтому могут возвращать много значений:
(1:2) == (1:4)
[1] TRUE TRUE FALSE FALSE
И функция as.numeric()
, примененная к значению 1
, будет возвращать именно ввод.
Дальнейший комментарий: Поскольку ваша попытка использовать "==" действительно была неявной операцией над множеством, вы можете просмотреть страницу справки для ?intersect
.Существуют также пакеты, которые обрабатывают более сложные функции множеств.
Приведение R может идти вперед и назад между логическим и числовым в зависимости от того, как определены функции:
sum( letters[1:10] %in% letters)
[1] 10
sum( letters[1:10] == letters)
[1] 10
Warning message:
In letters[1:10] == letters :
longer object length is not a multiple of shorter object length