我知道 && 和 || 的部分 编写更高效的代码,因为它们在链中执行最少数量的测试,并且一旦我们有足够的信息知道链的结果将是什么,它们就会立即爆发。
- 一旦 && 在链中命中 FALSE,它就会停止评估并为整个链返回 FALSE。
- 尽快|| 在链中命中 TRUE 它停止评估并为链返回 TRUE
但是我在 Garrett Grolemund 的书中读到“......双运算符并不适合任何地方。&& 和 || 没有向量化,这意味着它们只能在运算符的每一侧处理一个逻辑测试......”有人可以请向我解释强调的部分是什么意思?
是否进行了一些简单的测试,而 & 正在两个逻辑向量的相应元素之间进行元素比较, && 仅比较第一个元素并返回 TRUE,因为运算符未进行矢量化?是上面所有强调的部分的意思,还是还有更多的意思?
c(T, F, F, F, F) & c(T, T, F, T, F)
[1] TRUE FALSE FALSE FALSE FALSE
c(T, F, F, F, F) && c(T, T, F, T, F)
[1] TRUE
c(F, F, F, F, F) && c(T, T, F, T, F)
[1] FALSE
any
使用and将运算符两侧的向量折叠为一个布尔值all
。
any(T, T, F, F, T) && all(F, F, T, T, T)
[1] FALSE
any(T, T, F, F, T) && any(F, F, T, T, T)
[1] TRUE