R中&和&&以及|和||有什么区别?

47

为什么有四个逻辑运算符:

&, &&
|, ||

使用上有什么区别?

是的,我查看了文档,但还是有点困惑。文档上说:

 ‘&’ and ‘&&’ indicate logical AND and ‘|’ and ‘||’ indicate
 logical OR.  The shorter form performs elementwise comparisons in
 much the same way as arithmetic operators.  The longer form
 evaluates left to right examining only the first element of each
 vector.  Evaluation proceeds only until the result is determined.
 The longer form is appropriate for programming control-flow and
 typically preferred inif’ clauses.

我认为一个例子会清晰地展示它们。谢谢。


16
最好包含重复链接... - Michael Szczepaniak
1
使用dplyr时,使用&和|逻辑运算符。我不小心多次使用了&&和II(因为我也是C#程序员),它返回了与使用逻辑AND和OR所期望的不同的结果。 - Andrew Borst
我很高兴你问了。我几乎总是对R文档感到困惑。 - eod
& 可能会返回一个向量,而 && 返回单个TRUE或FALSE。我认为 | 和 || 的情况也是如此。关于 & 和 && 之间的差异的明确答案在这里 https://dev59.com/SWw15IYBdhLWcg3whMI1#6559049 - eod
1个回答

39
以下是主要的不同之处:
  1. 长形式(&&或||)短路,这意味着如果它只验证第一个元素就可以识别结果。在进行&&比较时,如果前两个元素的比较结果为false,则比较下一组元素的结果也为False。因此,返回false。而在进行||比较时,如果比较结果在前几个元素中为true,我们可以有信心地说任何进一步的验证都不会改变结果,因此返回True

  2. 短形式继续为整个向量执行操作,并创建结果向量并返回它。

希望这有所帮助。
引用:

&和&&表示逻辑AND,|和||表示逻辑OR。短格式以类似于算术运算符的方式执行逐元素比较。长格式从左到右评估,仅检查每个向量的第一个元素。仅在确定结果后才进行评估。长格式适用于编程控制流,并通常在if子句中优先使用。

来源:http://stat.ethz.ch/R-manual/R-patched/library/base/html/Logic.html

6
此文本已经在问题中出现! - Matthew Lundberg
7
@MatthewLundberg 这段文字是在我回答之后添加的。 - Buddha
8
这个问题似乎没有被编辑过,但这种情况有时会发生——快速编辑会合并在一起,让快速回答看起来很愚蠢。我曾考虑给你的回答点个踩,现在我很高兴我没这么做。 - Matthew Lundberg
以下是一些示例。警告 - 需要登录Coursera。更多关于R运算符的内容 | Google数据分析专业证书 - Pavol Travnik
阅读了答案后,我仍然感到困惑。你能否给出4个例子? - eod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接