R语言 控制流:for、while、ifelse和自定义函数function 您所在的位置:网站首页 r语言if函数自循环 R语言 控制流:for、while、ifelse和自定义函数function

R语言 控制流:for、while、ifelse和自定义函数function

2023-11-13 23:46| 来源: 网络整理| 查看: 265

行列引用、条件筛选等可以简单的数据管理,但其在无法有效处理多次、多重、有规律的循环和判断问题,而控制流却可以通过循环、判断、跳错等等操作轻松处理此类问题。

以下概念贯穿控制流张杰的内容,需要首先认识:

语句(statement):单独或组合语句,一般在{}中以;分隔 。例如:{语句1;语句2} 条件(cond): 最常见的是判断一个条件是否成立。如果成立则执行一条语句或者一个代码块,比如上例a是否小于b,如果小于则输出b 表达式(expr):一个数值或字符的求值语句,多用于数据计算过程或赋值序列(seq):一个数值或者字符序列

目录

1 分支控制

1.1 if-else

1.2 ifelse

1.3 switch

2 循环控制流

2.1 for循环

2.2 while循环

2.3 repeat 循环

3 function函数(一次编写,多次调用,一劳永逸)

3.1 自定义函数编写

3.2 source()文件间调用自定义函数

分支和循环是通用编程语言中常见的两大控制流。其中,分支控制是根据条件表达式的结果,执行不同的代码段;循环控制是根据条件重复执行代码块,为了避免无限循环,可以根据条件结束循环。接下来分别从分支控制和循环控制,对R语言中的控制流做简单讲述。

正文

1 分支控制

1.1 if-else

经典的流程控制关键字是if-else,并可以把多个if-else语句连接到一起

#if-else分支控制流语法 if ( test_expression1) { statement1 } else if ( test_expression2) { statement2 } else { statement3 }

示例

#嵌套用法 > a=5 > b=6 > if (a < b) {a ifelse(x %in% c("a", "b", "c"), x, factor(NA)) [1] 1 1 3 NA 1 2 NA 2 NA NA

注意:返回值的class属性跟test表达式相同,其mode属性是由 yes 或 no表达式确定的。当ifelse()用于返回Date类型的对象时,返回值是numeric类型,而不是Date类型,这是因为返回值的class是由test表达式决定的。

> dates dates [1] "2011-01-01" "2011-01-02" "2011-01-03" "2011-01-04" "2011-01-05" > dates dates [1] 14974 14976 14977 14978 14979 #解决方案是:把返回值的class重新设置为Date类型。 > dates dates [1] "2011-01-01" "2011-01-02" "2011-01-03" "2011-01-04" "2011-01-05" > dates dates [1] 14974 14976 14977 14978 14979 > class(dates) dates [1] "2010-12-31" "2011-01-02" "2011-01-03" "2011-01-04" "2011-01-05"

1.3 switch

如果分支较多,可以使用switch函数实现分支的选择,switch函数的第一个参数是表达式(exp),通常是一个字符串。当表达式(exp)匹配后续的参数名(即变量名)时,返回参数的值

#switch语法 switch(字符,参数名1='参数值2',参数名2='参数值2',……"其他")

示例

#当表达式(exp)匹配后续的参数名(即变量名)时,返回参数的值 > t = "r" > switch(t,r='re',g='gr',b='bl',"error") [1] "re" #如果不匹配任何参数名,switch函数不返回任何值,可以添加一个匿名的参数, #当表达式(exp)匹配不上任意一个命名参数时,switch函数将返回匿名参数的值: > t = "xs" > switch(t,r='re',g='gr',b='bl',"error") [1] "error"

2 循环控制流

repeat、while和for是常见的循环控制语句。

2.1 for循环

使用迭代器和一个向量参数,在每个循环中,迭代器变量从向量中取得一个值,直到迭代所有得向量

#语句 for (变量 in 序列/字符集) {语句/表达式}

示例

#依次执行序列/字符集中的每一个数据+print语句 > for (i in 1:5) print(letters[i]) [1] "a" [1] "b" [1] "c" [1] "d" [1] "e" #依次执行序列/字符集中的每一个数据+表达式+print语句 > for (i in 1:5) {j = j + i; print(c(i,j))} [1] 1 1 [1] 2 3 [1] 3 6 [1] 4 10 [1] 5 15 > j = 0 > for (i in 1:5) {j = j + i; print(c(i,j))} [1] 1 1 [1] 2 3 [1] 3 6 [1] 4 10 [1] 5 15 > print(j) [1] 15

2.2 while循环

先检测条件,如果条件为TRUE,执行code;如果条件为FALSE,结束循环

#语句 while (条件) {语句/表达式} #条件为TRUE,执行语句/表达式;否则终止跳出

示例

> i=5 > while (i >0) {j = i; i=i-1 ; print(c(j,i))} [1] 5 4 [1] 4 3 [1] 3 2 [1] 2 1 [1] 1 0

2.3 repeat 循环 repeat 循环:先执行代码,遇到break关键字,结束循环

repeat {code if(条件) break}

示例

> i=100 > sum=0 > repeat + { + if(i==0) + break + sum=i+sum + i=i-1 + } > print(sum) [1] 5050

3 function函数(一次编写,多次调用,一劳永逸)

3.1 自定义函数编写

R通过function关键字定义函数,函数主要由函数名称,参数,运行的代码块和返回值组成,函数名称是变量,参数是调用函数时需要传递的形式参数;代码块是由由大括号构成,是调用函数时需要执行的代码逻辑;R的函数不需要显式地使用return关键字明确返回值,R函数的计算的最后一个值将自动作为返回值。

#语法 myfunc=function(arg1,arg2,....) #参数 { 表达式/循环/print语句等 return(object) #返回输出的对象 }

示例1:简单计算

> avg avg(4,5) [1] 4.5 > avg avg(4,5) [1] 4.5

示例2:矩阵计算

> mat1 mat2 f


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有