они могут обрабатывать только один логический тест на каждой стороне оператора
a <- c(T, F, F, F)
b <- c(T, F, F, F)
a && b
Возвращает [1] ИСТИНА
Поскольку только первый элемент a
и b
проверены!
Редактировать:
Рассмотрим следующее, где мы «вращаем» a
и b
после каждого &&
теста:
a <- c(T, F, T, F)
b <- c(T, F, F, T)
for (i in seq_along(a)){
cat(paste0("'a' is: ", paste0(a, collapse=", "), " and\n'b' is: ", paste0(b, collapse=", "),"\n"))
print(paste0("'a && b' is: ", a && b))
a <- c(a[2:length(a)], a[1])
b <- c(b[2:length(b)], b[i])
}
Дает нам:
'a' is: TRUE, FALSE, TRUE, FALSE and
'b' is: TRUE, FALSE, FALSE, TRUE
[1] "'a && b' is: TRUE"
'a' is: FALSE, TRUE, FALSE, TRUE and
'b' is: FALSE, FALSE, TRUE, TRUE
[1] "'a && b' is: FALSE"
'a' is: TRUE, FALSE, TRUE, FALSE and
'b' is: FALSE, TRUE, TRUE, FALSE
[1] "'a && b' is: FALSE"
'a' is: FALSE, TRUE, FALSE, TRUE and
'b' is: TRUE, TRUE, FALSE, TRUE
[1] "'a && b' is: FALSE"
Дополнительно , &&
, ||
останавливается, как только выражение становится ясным:
FALSE & a_not_existing_object
TRUE | a_not_existing_object
Возвращает:
Error: object 'a_not_existing_object' not found
Error: object 'a_not_existing_object' not found
Но:
FALSE && a_not_existing_object
TRUE || a_not_existing_object
Возвращает:
[1] FALSE
[1] TRUE
Потому что что-нибудь после FALSE
И что-то (и TRUE
ИЛИ что-то) становится FALSE
и TRUE
соответственно
Это Последнее поведение &&
и ||
особенно полезно, если вы хотите проверить в потоке управления элемент, который может не существовать:
if (exists(a_not_existing_object) && a_not_existing_object > 42) {...}
Таким образом, оценка останавливается после того, как первое выражение оценивается как FALSE
и * 106 2 * часть даже не пыталась!