目录
一、if语句
1.1 if语句的基本操作
1.2 if...else语句
1.3 if语句也可有返回值
1.4 if...else if...else if...else
1.5 嵌套式if语句
二、递归式函数的设计
三、向量化的逻辑表达式
3.1 处理向量数据if...else的错误
3.2 ifelse()函数
四、switch语句
五、for循环
六、while循环
七、repeat循环
八、再谈break语句
九、next语句
一、if语句
1.1 if语句的基本操作
if语句的基本格式如下:
if (逻辑表达式)
{
系列运算命令
...
}
上述的逻辑表达式,读者也可以将它想成条件表达式,如果是TRUE,则执行大括号内的命令。如果运算命令只有1行,也可省略大括号,此时if的格式如下:
if (逻辑表达式) 运算命令
或
if (逻辑表达式)
运算命令
1.2 if...else语句
if...else语句的基本格式如下:
if (逻辑表达式)
{
系列运算命令A
...
}
else
{
系列运算命令B
...
}
如果使用直译器方式在Console窗口输入if语句,else不应该放在下一行的开始处,应该放在行的末端。因为当一个命令尚未结束时,若不将else放在前一行的末端,R语言直译器会认为前一行已经执行结束了。
1.3 if语句也可有返回值
1.4 if...else if...else if...else
使用if语句时,可能会碰上需要多重判断的情况,此时可以使用这个语句,它的格式如下:
if (逻辑表达式A)
{
系列运算命令A
...
}
else if (逻辑表达式B)
{
系列运算命令B
...
}
else if (逻辑运算命令n)
{
系列运算命令n
...
}
else
{
系列其他运算命令
...
}
1.5 嵌套式if语句
所谓嵌套式if语句是指,if语句内也可以有其他的if语句。
二、递归式函数的设计
如果一个函数可以调用自己,这个函数被称为递归式函数。R语言也可支持函数自己调用自己。递归式函数的调用具有下列特性:
1.递归式函数每次调用自己时,都会是问题越来越小。
2.必须有一个终止条件来结束递归函数的运行。
递归函数可以使程序变得很简洁,但是很容易掉进无限循环的陷阱,所以设计这类函数时,一定要特别小心。
三、向量化的逻辑表达式
3.1 处理向量数据if...else的错误
3.2 ifelse()函数
这是一个可以处理向量数据的函数,其基本使用格式如下所示:
ifelse(逻辑判断,TRUE表达式,FALSE表达式)
如果逻辑判断是TRUE,则执行TRUE表达式。
如果逻辑判断是FALSE,则执行FALSE表达式。
在上述执行结果中,我们传递了两个向量,分别是用电度数和是否贫困。其实也可以将用电度数和是否贫困处理成数据框,然后调用ch12_12()函数时,传递数据框。
四、switch语句
switch语句无法处理向量数据。
它的使用格式如下:
switch(判断运算,表达式1,表达式2,...)
判断运算的最终值可能是数字或文字,如果最终值是1则执行表达式1,如果最终值是2则执行表达式2,其他依此类推。如果最终值是文字,则执行相应的表达式。
对于上述实例,如果输入非switch()内的字符串,将看不到任何返回结果。
switch()可以接受默认值,只要将其放在参数末端,然后拿掉判断值即可。
五、for循环
for循环可用于向量的对象操作,它的使用格式如下:
for (循环索引 in 区间) 单一运算命令
如果是多个运算命令,则使用格式如下:
for (循环索引 in 区间)
{
系列运算命令
...
}
数据集state.x77是一个矩阵,如下(只展示一部分):
六、while循环
while循环的使用格式如下:
while (逻辑表达式)
{
系列运算命令
...
}
如果逻辑表达式是TRUE,循环将继续执行,直到逻辑表达式为FALSE。
七、repeat循环
repeat循环的使用格式如下:
repeat
{
单一或系列运算命令
if (逻辑表达式) break
其他运算命令
}
若是if的逻辑表达式为TRUE,则执行break,跳出repeat循环。
八、再谈break语句
break可以与for循环或while循环配合使用。在这些循环内,当执行break时,可立即跳出循环。
九、next语句
next语句和break语句一样,需与if语句,也就是逻辑表达式配合使用,但是next语句会跳过目前这次循环剩下的命令,直接进行下一个循环。