布尔运算符&amp&及||

根据R语言的定义,与和&amp&amp(相应地||)是前者是矢量化的,而后者不是

根据帮助文本,我读到的差异类似于“And”和“AndAlso”(相应地“Or”和“OrElse”)之间的差异。。。
意思是:
不是所有的评估都必须是真的(即A、B或C总是真的,如果A是真的,那么停止评估,如果A是真的)

有人能在这里点灯吗?
另外,R中是否有AndAlso和OrElse

较短的是矢量化的,这意味着它们可以返回一个矢量,如下所示:

(-2:2)>=0);(-2:2)<=0)
#[1]假假真假假

较长的表单从左到右计算,只检查每个向量的第一个元素,因此上面给出

(-2:2)>=0)&(-2:2)<=0)
#[1]错误

正如帮助页面所说,这使得较长的表单“适合于编程控制流,并且在if子句中通常是首选的。”

因此,只有当确定向量的长度为1时,才需要使用长形式

你应该绝对确定你的向量只有长度1,比如在函数只返回长度1布尔值的情况下。如果向量的长度可能大于1,则需要使用缩写形式。因此,如果您不能完全确定,您应该首先检查,或者使用缩写形式,然后使用allany将其长度减少为1,以便在控制流语句中使用,如if

函数allany通常用于矢量化比较的结果,以分别查看所有或任何比较是否正确。这些函数的结果长度一定为1,因此它们适合在if子句中使用,而矢量化比较的结果则不适合。(尽管这些结果适合在ifelse中使用

最后一个区别是:&|只计算所需的术语(这似乎就是短路的意思)。例如,这里有一个比较,使用未定义的值a;如果它没有短路,就像&|没有短路一样,它将给出一个错误

a
#错误:找不到对象“a”
正确的| | a
#[1]是的
假&a
#[1]错误
对| a
#错误:找不到对象“a”
假a
#错误:找不到对象“a”

最后,参见R地狱中标题为“和”的第8.2.17节

发表评论