我们已经在之前的教程中讨论了控制结构的基础知识。在本教程中,我们将重点学习 R 编程语言中的条件语句或决策语句。让我们继续了解每种类型的条件语句。
条件语句进一步包括
R 编程语言中的 If 控制结构评估给定条件或表达式是否满足。只有当 if 关键字后的条件满足时,花括号 {} 内的语句块才会被执行。条件应评估为 TRUE 或 FALSE。
如果条件为 TRUE,则紧随条件后的 {} 中的代码或语句将执行,否则控制将切换到紧随 if 语句之后的下一条语句。
以下流程图描述了 if 条件期间控制流的一般结构。

If(condition){
#Perform some instructions
……..
……..
}
a = 5
b = 7
if(a<b){
print(paste(a,"is smaller than ", paste(b)))
}
创建了两个变量 a 和 b,分别赋值为 5 和 7。条件是检查 a 中的值是否小于 b 中的值。语法 if(a
相应代码块的输出是
[1] "5 is smaller than 7"
让我们看看如果条件不满足会发生什么,a 的值被修改为 8,这大于 b 中的值 (7)。这里,if 语句后面的条件出错或不满足,因为 8<7 是 FALSE。
a = 8
b = 7
if(a<b){
print(paste(a,"is smaller than ", paste(b)))
}
print(paste(a ,"is greater than",paste(b)))
print("The condition (a<b) is not satisfied")
上面代码生成的输出是
[1] "8 is greater than 7" [1] "The condition (a<b) is not satisfied"
从输出中,您可以看到花括号 {} 之外的语句被执行并显示。如果表达式评估返回 false 结果,则控制流会跳转到紧随 if 条件之后的下一条语句。
If-else 是另一种控制结构,与 if 语句有些相似,但在这里您可以在 if 条件之后提供 else 部分。if 条件检查花括号 {} 内要评估的条件或表达式是 True 还是 False。如果它返回 true,则执行 {} 花括号内的代码块。另一方面,如果评估的表达式或条件为 false,则 else 部分中提供的代码将被执行。
让我们通过流程图了解 R 编程中的 if-else 控制结构

If( condition) {
//do some instructions
}else {
//do some instructions
}
示例显示声明了两个变量 a 和 b,并分别赋值为 5 和 7。条件需要检查 a 中的值是否小于 a 中的值。条件 (a
a = 5
b = 7
if(a<b){
print(paste(a,"is smaller than ", paste(b)))
print("Terminated if condition")
}else{
print(paste(a ,"is greater than",paste(b)))
print("The condition (a<b) is not satisfied")
print("Executed else condition")
}
执行 if-else 控制结构的代码将生成以下输出,其中 5<7 被评估为 true 并显示 {} 内的代码
[1] "5 is smaller than 7" [1] "Terminated if condition"
让我们检查 if 条件未能执行的情况,控制结构的 else 部分开始执行。我们将 a 的值修改为 8,这会影响条件 (a
a = 8
b = 7
if(a<b){
print(paste(a,"is smaller than ", paste(b)))
print("Terminated if condition")
}else{
print(paste(a ,"is greater than",paste(b)))
print("The condition (a<b) is not satisfied")
print("Executed else condition")
}
生成的输出是 else 部分中包含的语句。
[1] "8 is greater than 7" [1] "The condition (a<b) is not satisfied" [1] "Executed else condition"
比较 if 和 if-else 的语法以及我们讨论的示例,以清楚地了解这两种控制结构。在 if 语句中,它后面的代码被执行,在 if-else 中,当 if 的执行失败时,控制流序列会移动到执行 else 区域。
控制结构可以通过在 if 和 else 语句之间添加 else if 语句进行自定义。R 提供了多个 else if 条件,可以包含在 if 和 else 语句之间。
执行从评估 if 语句内的条件 (if(condition)) 开始,如果它返回 true,则执行 if(condition) 下的一组语句。假设 if 条件失败,则其余的多个 else if(condition) 开始逐个检查。满足的条件将被执行,其他的将被丢弃。末尾的 else 部分用于在所有条件都不满足时显示。
当 **if** 条件评估为 **TRUE** 时,则打印紧邻 if 条件下的语句代码。并忽略或跳过所有其余语句。
另一方面,当 **if** 条件为 FALSE 时,控制流会跳转到紧邻 if 语句下方的 **else if** 语句。评估 **else if** 条件,如果它满足或为 **TRUE**,则执行结果打印语句。R 会忽略下面的代码。当 if 和 else if 条件都不满足,即它们的结果保持为 FALSE 时,else 部分会执行。您可以在 if 和 else 代码语句之间有多个 else if 语句
if(condition){
//do some instructions
}else if(condition){
//do some instructions
}else{
//do some instructions
}
表示 if-else 的流程图是

示例
a = -3 #varaible a is assigned value -3
if(a<0){ #checks if (condition)
print("negative number")
print("Terminated if condition")
}else if(a>0){ #checks else if (condition)
print("positive number")
print("Executed else if condition")
}else{ #checks else region
print("a is zero")
}
代码中有三个不同的区域,它们根据表达式的评估而执行。假设 if(condition) 满足“a 小于 0” (a<0),则执行花括号内的语句序列。当 a 为 -3 且 if 条件满足时,结果输出将如下所示
[1] "negative number" [1] "Terminated if condition"
当分配给 a 的值不是负数时,控制流会导航到我们描述的下一个语法部分,即 else if(condition)。else-if 后括号内的条件开始评估。如果示例中“a 大于 0” (a>0) 的条件被发现为真,则通过执行 else if 的花括号 {} 内的一系列代码来显示相应的输出。
[1] "positive number" [1] "Executed else if condition"
如果所有条件都不满足,即评估表达式后为 False 值,则执行 else 部分中的代码。
[1] "a is zero"
在 R 编程中,一个 **if 语句位于另一个 if 语句内部** 被定义为 **嵌套 if** 语句。
当 **if** 条件评估为 **TRUE** 时,控制立即跳转到 **嵌套 if** 条件并开始评估 if 语句中给定的条件。评估后,如果结果为 **TRUE** 或满足,则紧邻内部 **if** 条件下的花括号内的代码块将执行。另一方面,如果内部 if 条件为 FALSE,则执行 else 部分代码区域。到目前为止,我们讨论了外部 **if** 条件评估为 TRUE 的情况。
当外部 **if** 条件在评估后为 FALSE 时,控制流会跳转到末尾的 else 部分,并执行其花括号内给出的指令。
if(condition) { #outer if
If(condition) { #inner if
//do some instructions
} else {
//do some instructions
}
} else {
//do some instructions
}

该程序显示当外部 **if** 条件满足时,内部 **if** 条件被执行。在示例中,x 被赋值为 23。
x < -23
if (x > 20) {
print("x is greater than 20")
if (x > 0) {
print("x is greater than 0")
} else {
print("x is negative ")
}
} else {
print("x is zero.")
}
输出
[1] "x is greater than 20" [1] "x is greater than 0"
程序显示当外部 **if** 条件为 FALSE 时,控制流跳转到 else 区域,而不执行嵌套 if 条件来终止控制结构。给定变量 x 的值为 23。
x < -23
if (x > 25) {
print("x is greater than 20")
if (x > 0) {
print("x is greater than 0")
} else {
print("x is negative ")
}
} else {
print("x is greater than 25.")
}
输出
[1] "x is greater than 25."
**switch** 控制结构是另一种控制语句,它与 else-if 功能有些相似。R 编程语言使用 switch 语句有 m 个选项可供选择,并通过验证哪个 case 满足给定条件的要求来执行其中一个选项(case)。当条件与相应的 case 匹配时,该 case 将被执行。
因此,R 编程语言中的 switch() 语句会根据给定元素或值列表评估条件,并始终返回列表中第一个匹配的元素或值。
R 中的 switch 控制结构评估提供的表达式或条件,并相应地选择括号 () 中的参数,例如 case1 和 case2。
switch(condition,case1 = “”,case2= “”,………., Default statement)
其中
第一个参数始终是要评估的条件或表达式。
考虑一个例子
a <- switch(
4, #condition
#(...... or case1,case2..)
"red", #case1
"blue", #case2
"pink", #case3
"orange" #case4
)
print(a)
switch 评估给定的条件 4,并返回列表中与它匹配的相应元素。这里条件 4 匹配 case4。让我们看看执行代码时显示的输出。
[1] "orange"
switch 控制结构的流程图是

如果评估的条件是一个超出 switch 语句中 case 数量的整数,它将返回一个 NULL 值。在上面的例子中,当条件修改为 5 后,在搜索与每个 case 对应的匹配项后,没有现有 case 将返回一个 NULL 值。
看下面的代码片段

可以提供默认语句而不是返回 NULL。下面是带有默认 case 的相同代码
a <- switch(
5, #condition
#(...... or case1,case2..)
"red", #case1
"blue", #case2
"pink", #case3
"orange" , #case4
print("no match found") #default statement
#no more cases exist to evaluate so returns default statement
)
print(a)
当找不到匹配项且存在默认语句时的输出是
[1] "no match found"
注意:默认语句在 switch 控制结构中是可选的。
switch 控制结构以两种不同的方式进行评估,具体取决于初始参数是数字还是字符串。
示例显示,在第一个示例中,字符串类型的红色与列表中的第一个 case 或元素匹配;在第二个示例中,蓝色与第一个元素根据它们在选项中的位置匹配。
> switch("color", "color" = "red", "shape" = "circle", "radius" = 5,"color" = "blue")
[1] "red"
> switch("color", "color" = "blue", "shape" = "circle", "radius" = 5,"color" = "red")
[1] "blue"
>
注意:switch() 函数包含一个作为条件(表达式)的字符串进行测试。
考虑一个示例,用于评估表达式或条件与缺失匹配的情况,但返回匹配后的紧邻 case。在下面的示例中,要评估的条件是颜色,其中颜色对应的值缺失,因此在这些情况下,下一个 case 形状作为输出返回。同样地,尝试理解下一个示例。
> switch("color", "color" = , "shape" = "circle", "radius" = 5,"color" = "blue")
[1] "circle"
> switch("color", "color" = , "radius" = 5,"shape" = "circle", "color" = "red")
[1] 5
ifelse() 函数是 R 编程语言中一个非常有用的函数。它可以被视为一个立即 if 语句,这意味着它会评估 ifelse() 函数的第一个参数中的对象,如果它为 **TRUE**,则返回第二个参数中的对象。如果为 **FALSE**,则返回第三个参数中的对象。当您执行某些操作时,大多数输入都作为 向量 获取。
在 R 编程语言中,ifelse() 函数是条件语句 if-else 的简写形式。查看 if-else 的描述以回顾相同的概念。下面是 ifelse() 的语法。
Ifelse(condition,TRUE,FALSE)
其中
考虑一个检查人体健康的例子。假设我们将体重大于 40 的人归类为健康,其他人则为不健康。使用 c() 函数创建一个名为“wgt”的向量,它是一个用于检查条件的输入向量。第二个和第三个参数是 TRUE 和 FALSE。要检查的条件是体重是否大于 41。如果条件满足,则返回 1,否则返回 0(false)
#ifelse(condition.TRUE,FALSE)
#Create a variable weight
wgt = c(39,48,42,52,60,41,38,49,58)
# we need to select weights greater than 41
#statements = weight >=41
#TRUE: people are fit(1)
#FALSE : people are not fit(0)
fit_enough = ifelse(wgt>=41,1,0)
print(fit_enough)
生成的输出如下所示,其中只有 2 人体重为 39、38 不健康,用值 0 表示。
[1] 0 1 1 1 1 1 0 1 1
无需编写单独的 if 和 else 代码,两者都集成在单个 ifelse() 函数中,以一步检查两个条件。