|之间的区别和||在R

时间:2013-11-21 13:23:28

标签: r operators

我是一个我必须承认的新手,但我不明白这两个运营商之间的区别。我阅读了以下内容,但我无法理解:

"较短的形式执行元素比较,其方式与算术运算符非常相似。较长的形式从左到右评估仅检查每个向量的第一个元素。评估仅在确定结果之前进行。较长的形式适用于编程控制流程,通常在if子句中是首选。"

为什么第二种形式更合适?

3 个答案:

答案 0 :(得分:4)

第二种形式对short-circuiting很有用,可能避免在第二种(或后续的长篇陈述)条件下进行其他冗长的计算或错误。

特别是

condition || lengthyComputation()
如果conditionTRUE

将迅速得到解决。例如,

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 

答案 1 :(得分:4)

短向元素在向量上运算并返回与输入向量大小相同的向量。如有必要,它会回收较短的载体:

> c(FALSE, FALSE) | c(TRUE, FALSE)
[1]  TRUE FALSE

长形式只考虑每个vecotr的第一个元素并返回一个长度为一的逻辑向量。

> c(FALSE, FALSE) || c(FALSE, TRUE, FALSE)
[1] FALSE

通常,只要有if语句,就需要一个长度为一的逻辑向量作为条件。由于|||快,因此应首选此版本。

答案 2 :(得分:-2)

控制流语句期望条件是布尔值(或者可以转换为它的东西)。 第一个运算符|不返回布尔值,而是返回布尔值向量,因此不打算在条件中使用。 ||运算符返回一个布尔值,使其适合控制流。