2018-10-16
阅读量:
1464
R语言
它们是Logical Operators(逻辑运算符)
区别之一
当然,如果只计算两个标量(长度为1的向量),他俩似乎是差不多的:
TRUE & FALSE
## [1] FALSE
TRUE && FALSE
## [1] FALSE
如果计算的是两个向量的话,结果就明显不同:
c(TRUE, FALSE) & c(TRUE, TRUE)
## [1] TRUE FALSE
c(TRUE, FALSE) && c(TRUE, TRUE)
## [1] TRUE
区别在于,& 依次比较两个向量中的对应元素,而&&只比较两个向量的首个元素。 &&的这种偷懒的做法确保了它的计算结果只为一个标量,TURE或FALSE。这就使他 可以与if等只接受一个标量为参数的函数完美搭配起来。
区别之二
说到偷懒,和&相比,&&偷懒的地方还不止这一处:
a #对象a不存在
## Error in eval_r(expr, envir, enclos): 找不到对象'a'
FALSE & a
## Error in eval_r(expr, envir, enclos): 找不到对象'a'
FALSE && a
## [1] FALSE
在进行比较时,&& 如果发现左边对象的值为FALSE,那么他就不会计算右边的对象了,(因为无论 右边对象的值为多少,逻辑与的结果总为FALSE)所以即使右边对象不存在时,也没有抛出错误。而 &就老实多了,计算完左边后他还会计算右边,而右边对象不存在,于是抛出错误。&&的这种计算方法 叫做短路计算。
如果好奇&&是怎么偷懒的,可以查看它的源代码,这里略去。
86.9069
3
0
关注作者
收藏
评论(0)
发表评论
暂无数据
推荐帖子
0条评论
0条评论
1条评论