逻辑向量
与数值向量不同,一个逻辑向量储存一组 TRUE 或 FALSE 值。它们基本上以“是”或
“否”来表示对一组逻辑问题的回答。
最简单的逻辑向量是 TRUE 或者 FALSE 本身:
TRUE
## [1] TRUE
获得一个逻辑向量更一般的方法是询问关于 R 对象的逻辑性问题。例如,我们可以询
问 R,1 是否大于 2:
1 > 2
## [1] FALSE
如果回答“是”,就返回 TRUE;如果回答是“否”,就返回 FALSE。有时,写 TRUE
或者 FALSE 太繁琐了,我们可以使用 TRUE 的缩写 T 和 FALSE 的缩写 F。如果我们想同
时进行多个比较,可以直接在问题中使用数值向量:
c(1, 2) > 2
## [1] FALSE FALSE
R 会将这一表达式理解为在 c(1, 2)和 2 之间依次进行元素比较。换句话说,这实际
上等价于 c(1 > 2, 2 > 2)。
我们可以比较两个多元素数值向量,只要较长向量的长度是较短向量长度的整数倍:
c(1, 2) > c(2, 1)
## [1] FALSE TRUE
上述代码等价于 c(1 > 2, 2 > 1)。为了验证两个不同长度的向量是如何比较的,
请看下面的例子:
c(2, 3) > c(1, 2, -1, 3)
## [1] TRUE TRUE TRUE FALSE
20 第 2 章 基本对象
这个结果可能会使你有些困扰。以上代码的运算机制是不断地循环较短的向量并进行
比较,等价于 c(2 > 1, 3 > 2, 2 > −1, 3 > 3)。更明确地说,较短的向量将会不
断地循环直到和较长向量中的元素全部完成比较。
在 R 中,定义了一些二元逻辑运算符,例如“==”表示相等,“>”表示大于,“>=”
表示大于或等于,“<”表示小于,“<=”表示小于或等于。此外,R 还提供了一些其他运算
符,例如用%in%判断运算符左侧向量的每一个元素是否都包含在运算符右侧的向量中:
1 %in% c(1, 2, 3)
## [1] TRUE
c(1, 4) %in% c(1, 2, 3)
## [1] TRUE FALSE
你可能注意到了所有等式运算符都执行了循环,但是%in%并没有。相反,它总是通过迭代
左侧向量的单个元素,在上述例子中,就像c(1 %in% c(1, 2, 3), 4 %in% c(1, 2, 3))
这样完成运算。