在 R 中使用 if 和 if...else 语句
Jesse John
2023年1月30日
本文描述了 R 的 if
和 if-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 中使用多个 if
和 else
语句
使用一系列条件结构时需要考虑几点。这些在大多数语言中都很常见。
-
当使用多个条件时,我们编写它们的顺序很重要。
-
如果我们使用一连串的
if
和else
语句,以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