实验六十四 R语言基础:流程控制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Will_cruise/article/details/89465321

64.1 实验目的

1. 理解程序的逻辑结构;

2. 理解分支结构;

3. 理解循环结构。

64.2 实验要求

1. 掌握分支结构;

2. 掌握循环结构。

64.3 实验原理

流程控制是存在于所有计算机语言里的基本概念,指在程序运行时,个别的指令执行或求值的顺序。一段程序有三种基本的控制结构,分别是顺序结构、分支结构和循环结构。程序语句由上到下逐行执行,便是顺序结构;分支结构是程序根据判断条件选择性地执行部分语句;循环结构是指同一个语句组根据一定的条件执行若干次。下面我们学习在R语言里,如何运用分支结构和循环结构。

64.3.1 分支结构

64.3.1.1 if语句

if语句由一个布尔表达式后跟一个或多个语句组成。

语法:

if(boolean_expression) {
   // 当boolean_expression为真时执行的代码
}

64.3.1.2 if...else语句

if语句后面可以有一个可选的else语句,当布尔表达式为false时执行。

语法:

 if(boolean_expression) {
   //当boolean_expression为真时执行的代码
} else {
   //当boolean_expression为假时所执行的代码
}

64.3.1.3 switch语句

switch语句允许根据值列表测试变量的相等性。

以下规则适用于switch语句:

1. 如果expression的值不是字符串,那么它将被强制转为整数。

2. 在交换机中可以有任意数量的case语句。 每个案例后面都跟要比较的值和冒号。

3. 如果如果表达式求值为整数且值在1和nargs() - 1(参数的最大数目)之间,则对case条件的相应元素求值并返回结果。

4. 如果表达式求值为字符串,那么该字符串与元素的名称匹配。

5. 如果有多个匹配,则返回第一个匹配元素。

6. 无默认参数可用。

7. 在没有匹配的情况下,如果存在一个未命名的元素,那么该元素的值将被返回。(如果有多个这样的参数,则返回错误。)

语法:

switch(expression, case1, case2, case3....)

64.3.2 循环结构

64.3.2.1 repeat循环

多次执行同一代码块,直到满足停止条件。

语法:

repeat { 
   commands 
   if(condition) {
      break
   }
}

break关键字表示跳出循环,即结束循环。

64.3.2.2 while循环

在给定条件为真时,重复语句或语句组。它在执行循环体之前测试条件。

语法:

while (test_expression) {
   statement
}

while循环的关键点是循环可能永远不会执行。 当条件被测试并且结果为false时,循环体将被跳过,while循环之后的第一条语句将被执行。

64.3.2.3 for循环

像while语句一样,不同之处在于它在循环体结尾测试条件。

语法:

for(test_expression) {
   statement
}

R的for循环是特别灵活的,因为它们不限于整数,或者输入中的偶数。 我们可以传递字符向量,逻辑向量,列表或表达式。

64.4 实验步骤

启动实验后,登录master服务器,使用vi编辑器编写以下脚本。

64.4.1 编写if及if-else语句测试程序

编写R语言if及if-else测试程序if.R,在vi编辑器中键入如下代码:

#!/usr/bin/env Rscript
# 读取命令行参数
args<-commandArgs(T)
# 读取的参数默认为string类型,此处需要转换,如果不是数字会产生NA值
a = as.numeric(args[1])
b = as.numeric(args[2])
# 先判断两个数字是否是整数,再对两个数进行大小比较
if(!is.na(a) && !is.na(b)) 
{
   if(a < b) print( "a is less than b" )
   if(a == b) print( "a is equal to b" )
   if(a > b) print( "a is greater than b" )
}else
{
   print("Arguments should be two integers!Try it again.")
}

键入完成后,保存退出。

64.4.2 运行if及if-else语句测试程序

在master服务器上执行如下命令,运行R语言if及if-else语句测试程序。大家设置参数时可以尝试其它输入,下面为示例输入参数为100和200:

Rscript if.R 100 200

64.4.3 编写switch语句测试程序

编写R语言switch语句测试程序switch.R,在vi编辑器中键入如下代码:

#!/usr/bin/env Rscript
# 读取命令行参数
args<-commandArgs(T)
# 读取的参数默认为string类型,此处需要转换,如果不是数字会产生NA值
a = as.numeric(args[1])
x = switch(
   a,
   "first",
   "second",
   "third",
   "fourth"
)
print(x)

键入完成后,保存退出。

64.4.4 运行switch语句测试程序

在master服务器上执行如下命令,运行R语言switch语句测试程序。大家设置参数时可以尝试其它输入,下面为示例输入参数为3:

Rscript switch.R 3

64.4.5 编写repeat语句测试程序

编写R语言repeat语句测试程序repeat.R,在vi编辑器中键入如下代码:

#!/usr/bin/env Rscript
i = 2
v = "hello, world"
repeat {
   print(v)
   i = i+1
   if(i > 5) {
      break
   }
}

键入完成后,保存退出。

64.4.6 运行repeat语句测试程序

在master服务器上执行如下命令,运行R语言repeat语句测试程序。

Rscript repeat.R

64.4.7 编写for和while循环语句测试程序

编写R语言流程控制程序for_while.R,在vi编辑器中键入如下代码:

#!/usr/bin/env Rscript
# 测试for循环语句
print('------------for-------------')
a = list( 1 : 3 )
for( i in a ){
print( i )
}
# 测试while循环语句
print('------------while-------------')
i = 0
while (i < 10) {
   print(i)
   i = i + 1
}

64.4.8 运行for和while循环语句测试程序

在master服务器上执行如下命令,运行R语言for和while循环语句测试程序。

Rscript for_while.R

64.5 实验结果

64.5.1 if.R运行结果

if及if-else语句测试程序运行结果如下所示:

图64-1 if.R运行结果

64.5.2 switch.R运行结果

switch语句测试程序运行结果如下所示:

图64-2 switch.R运行结果

64.5.3 repeat.R运行结果

repeat语句测试程序运行结果输出如下所示:

图64-3 repeat.R运行结果

64.5.4 for_while.R运行结果

for和while循环语句测试程序运行结果输出如下所示:

图64-4 for_while.R运行结果

猜你喜欢

转载自blog.csdn.net/Will_cruise/article/details/89465321