在 R 中使用 if 和 if...else 語句

Jesse John 2023年1月30日
  1. R 中 if 語句的語法
  2. R 中 else 語句的正確形式
  3. 在 R 中使用多個 ifelse 語句
在 R 中使用 if 和 if...else 語句

本文描述了 R 的 ifif-else 條件結構的正確語法。

請注意,如果 if 構造基於資料幀或向量元素的行,則僅使用第一個元素。

R 中 if 語句的語法

if 結構的有效形式如下:

if(condition)
    statement to execute

if(condition){
    statement 1
    statement 2
}

如果沒有括號,if 塊將僅在條件為真時評估一個語句或表示式。即使條件為假,其他人也會被執行。

示例程式碼:

j = 15
if(j < 12)
    print(j+1)
    print("This should not print if j >= 12.")
print(j)

輸出:

> j = 15
> if(j < 12)
+   print(j+1)
>   print("This should not print if j >= 12.")
[1] "This should not print if j >= 12."
> print(j)
[1] 15

if 之後的第二個語句被評估,因為我們沒有使用括號。

如果條件為真,我們需要使用括號來評估多個語句。

示例程式碼:

j = 53
if(j < 46){
    print(j+1)
    print("This should not print if j >= 46.")}
print(j)

輸出:

> j = 53
> if(j < 46){
+   print(j+1)
+   print("This should not print if j >= 46.")}
> print(j)
[1] 53

R 中 else 語句的正確形式

else 關鍵字必須與 if 後面的表示式的末尾放在同一行。以下程式碼引發錯誤。

示例程式碼:

j = 18
if(j < 28)
    print(j)
else
    print("Not lower than 28.")

輸出:

> j = 18
> if(j < 28)
+   print(j)
[1] 18
> else
Error: unexpected 'else' in "else"
>   print("Not lower than 28.")
[1] "Not lower than 28."

正確的形式如下所示。

示例程式碼:

j = 8
if(j < 15)
    print(j) else
        print("Not less than 15.")

輸出:

> j = 8
> if(j < 15)
+   print(j) else
+     print("Not less than 15.")
[1] 8

使用括號有助於使我們的程式碼更具可讀性並避免錯誤。現在,將 else 關鍵字放在 if 塊後面的右括號所在的行。

示例程式碼:

k = 101
if(k <= 100){
    print("k is not more than 100.")
} else {
    print("k is more than 100.")
}

輸出:

> k = 101
> if(k <= 100){
+   print("k is not more than 100.")
+ } else {
+   print("k is more than 100.")
+ }
[1] "k is more than 100."

在 R 中使用多個 ifelse 語句

使用一系列條件結構時需要考慮幾點。這些在大多數語言中都很常見。

  • 當使用多個條件時,我們編寫它們的順序很重要。

  • 如果我們使用一連串的 ifelse 語句,以 else 語句結尾,對應於第一個真條件或 else 條件的語句將被執行。

  • 如果我們使用一系列 if 語句,可能會有多個條件為真。

  • 如果我們不使用最後的 else 語句,則不會執行任何語句。

示例程式碼:

jk  = 155

# Wrong Order
if(jk < 300){
    print("Less than 300.")
} else if (jk < 200) {
    print("Less than 200.")
} else if (jk < 100) {
    print("Less than 100.")
}

# Correct Order
if(jk < 100){
    print("Less than 100.")
} else if (jk < 200) {
    print("Less than 200.")
} else if (jk < 300) {
    print("Less than 300.")
}

# Multiple conditions satisfied. No else statements.
if(jk < 100){
    print("Less than 100.")
}
if (jk < 200) {
    print("Less than 200.")
}
if (jk < 300) {
    print("Less than 300.")
}

# Last else to cover remaining cases.
if(jk < 15){
    print("Less than 15.")
} else if (jk < 25) {
    print("Less than 25.")
} else if (jk < 35) {
    print("Less than 35.")
} else {
    print("Not less than 35.")
}

# NO last else; no condition may be met.
if(jk < 15){
    print("Less than 15.")
} else if (jk < 25) {
    print("Less than 25.")
} else if (jk < 35) {
    print("Less than 35.")
}

輸出:

> jk  = 155
>
> # Wrong Order
> if(jk < 300){
+   print("Less than 300.")
+ } else if (jk < 200) {
+   print("Less than 200.")
+ } else if (jk < 100) {
+   print("Less than 100.")
+ }
[1] "Less than 300."
>
> # Correct Order
> if(jk < 100){
+   print("Less than 100.")
+ } else if (jk < 200) {
+   print("Less than 200.")
+ } else if (jk < 300) {
+   print("Less than 300.")
+ }
[1] "Less than 200."
>
> # Multiple conditions satisfied. No else statements.
> if(jk < 100){
+   print("Less than 100.")
+ }
> if (jk < 200) {
+   print("Less than 200.")
+ }
[1] "Less than 200."
> if (jk < 300) {
+   print("Less than 300.")
+ }
[1] "Less than 300."
>
> # Last else to cover remaining cases.
> if(jk < 15){
+   print("Less than 15.")
+ } else if (jk < 25) {
+   print("Less than 25.")
+ } else if (jk < 35) {
+   print("Less than 35.")
+ } else {
+   print("Not less than 35.")
+ }
[1] "Not less than 35."
>
> # NO last else; no condition may be met.
> if(jk < 15){
+   print("Less than 15.")
+ } else if (jk < 25) {
+   print("Less than 25.")
+ } else if (jk < 35) {
+   print("Less than 35.")
+ }

要對資料框列的值使用 if 條件,請閱讀 R 的向量化 ifelse() 函式

作者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

相關文章 - R Function