我得承认我是一个初学者,但我不理解这两个运算符之间的区别。我读了下面的内容,但我有困难:
"较短的形式以与算术运算符类似的方式执行逐元素比较。较长的形式从左到右评估,仅检查每个向量的第一个元素。只有在确定结果时才进行评估。较长的形式适用于编程控制流,并且通常在 if 子句中使用。"
为什么第二种形式更为合适?
condition || lengthyComputation()
如果condition
为TRUE
,问题将迅速解决。例如:
system.time(TRUE || {Sys.sleep(1);TRUE})
user system elapsed
0 0 0
system.time(FALSE || {Sys.sleep(1);TRUE})
user system elapsed
0 0 1
short函数对向量进行逐元素操作,并返回与输入向量大小相同的向量。如果需要,它会循环使用较短的向量:
> c(FALSE, FALSE) | c(TRUE, FALSE)
[1] TRUE FALSE
> c(FALSE, FALSE) || c(FALSE, TRUE, FALSE)
[1] FALSE
if
语句来说明差异的例子。 - Mark Miller控制流语句期望条件为布尔值(或可转换为布尔值的内容)。
第一个运算符|
不返回布尔值,而是返回布尔向量,因此不适合用于条件判断。而||
运算符返回布尔值,因此适合用于控制流语句。
||
的返回值是一个长度为1的逻辑(原子)向量。 - Roland