2018-10-16
閱讀量:
2114
R語言中兩類比較符的區(qū)別
R語言中的?&?和?&&有什么區(qū)別?
它們是Logical Operators(邏輯運算符)
區(qū)別之一
當然,如果只計算兩個標量(長度為1的向量),他倆似乎是差不多的:
TRUE?&?FALSE
##?[1]?FALSE
TRUE?&&?FALSE
##?[1]?FALSE
如果計算的是兩個向量的話,結(jié)果就明顯不同:
c(TRUE,?FALSE)?&?c(TRUE,?TRUE)
##?[1]??TRUE?FALSE
c(TRUE,?FALSE)?&&?c(TRUE,?TRUE)
##?[1]?TRUE
區(qū)別在于,& 依次比較兩個向量中的對應元素,而&&只比較兩個向量的首個元素。 &&的這種偷懶的做法確保了它的計算結(jié)果只為一個標量,TURE或FALSE。這就使他 可以與if等只接受一個標量為參數(shù)的函數(shù)完美搭配起來。
區(qū)別之二
說到偷懶,和&相比,&&偷懶的地方還不止這一處:
a?#對象a不存在
##?Error?in?eval_r(expr,?envir,?enclos):?找不到對象'a'
FALSE?&?a
##?Error?in?eval_r(expr,?envir,?enclos):?找不到對象'a'
FALSE?&&?a
##?[1]?FALSE
在進行比較時,&& 如果發(fā)現(xiàn)左邊對象的值為FALSE,那么他就不會計算右邊的對象了,(因為無論 右邊對象的值為多少,邏輯與的結(jié)果總為FALSE)所以即使右邊對象不存在時,也沒有拋出錯誤。而 &就老實多了,計算完左邊后他還會計算右邊,而右邊對象不存在,于是拋出錯誤。&&的這種計算方法 叫做短路計算。
如果好奇&&是怎么偷懶的,可以查看它的源代碼,這里略去。






評論(0)


暫無數(shù)據(jù)
推薦帖子
0條評論
0條評論
0條評論