R語言中if(){}else{}語句和ifelse()函數的區別詳解

首先看看定義:

# if statement
if(cond) expr
if(cond) cons.expr  else  alt.expr

# ifelse function
ifelse(test, yes, no)

這兩個函數(R語言中都是函數)相同的地方都是根據條件返回對應的值。

區別在於:

if語句的條件是個TRUE/FALSE值,如果是個長度>1的邏輯向量,隻判斷第一個TRUE/FALSE值;而ifelse是長度任意的邏輯向量,返回根據邏輯向量對應對的yes/no值組合的新向量

ifelse如果test的長度是1,而yes/no是長度>1的向量,也是返回長度為1的對應值。如果yes/no是list類型,則返回第一個元素。而if語句根據條件返回對應表達式的值。

if語句和ifelse不能簡單互換,理由如上兩點。如果用錯瞭,得到的結果往往令人感到迷惑。

補充:R語言-條件判斷語句if-else

1.if語句

if (邏輯判斷值){expr}

若邏輯判斷值為TRUE,則執行{expr};若邏輯判斷值為FALSE,則不執行{expr}

> x<-6
> if(x<8) x<-x+10
> x
[1] 16
> x<-10
> if(x<8) x<-x+10
> x
[1] 10

2.if-else語句

if (邏輯判斷值){
   expr1
   }else{
   expr2
}

若邏輯判斷值為TRUE,則執行{expr1};否則不執行{expr}。

> x<-8
> if (x<30){
+     x<-x-5
+   }else{
+    x<-x+5
+ }
> x
[1] 3

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。