布尔

布尔值 属于 R

1 个练习

关于 布尔值

R 中的布尔值

真或假的值由 logical 类型表示。 它只包含两个值:TRUE 和 FALSE。

TRUE
#> [1] TRUE
FALSE
#> [1] FALSE
typeof(TRUE)
#> [1] "logical"

布尔运算符

R 中有五个布尔运算符。

!TRUE # FALSE (not)
TRUE && FALSE # FALSE (scalar and)
TRUE || FALSE # TRUE (scalar or)

TRUE & FALSE # FALSE (vector and)
TRUE | FALSE # TRUE (vector or)

&& 和 & 是布尔“与”。 当 && 两侧的表达式都为 TRUE 时,它们求值为 TRUE。

|| 和 | 是布尔“或”。 当 || 任意一侧的表达式为 TRUE 时,它们求值为 TRUE。

注意,与/或运算符有两组。

  • 双字符版本作用于单个值。
  • 单字符版本对向量逐元素运算,返回一个由布尔值组成的向量。

这个区别在vector-filtering概念中会变得重要,大概也会更清楚。

对单个值使用 & 和 | 在上面的例子里是可行的,因为它们会被当作长度为 1 的向量处理。 这种行为与双字符运算符有细微差别:只有后者会“短路”,也就是说,如果左边的值足以确定结果,右边的值就不会被求值。 因此,无论 anything 代表什么逻辑表达式,TRUE || anything 总是 TRUE,所以 anything 会被忽略。

对向量(长度为 2 或更长)使用 && 或 ||,意味着比较时只会用到第一个元素,结果是一个 TRUE/FALSE,而且很可能还会有一条警告信息。 这多半不是你想要的。

! 是布尔“非”。 它把 TRUE 和 FALSE 互换。

!TRUE
#> [1] FALSE
!FALSE
#> [1] TRUE

对于更长、更复杂的表达式,最好用括号把意图表达清楚。

(TRUE || FALSE) && (FALSE && TRUE)
#> [1] FALSE

TRUE || FALSE && (FALSE && TRUE)
#> [1] TRUE

异或没有中缀运算符(即 A 或 B,但不同时成立)。这种情况下可以使用 xor() 函数。

xor(TRUE, FALSE)
#> [1] TRUE
xor(TRUE, TRUE)
#> [1] FALSE
通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 布尔值