R语言-循环repeat,while,for,foreach,iter,next,break
R中有三种不同的循环结构:
1.repeat结构
它只是简单的重复同一个表达式:repeat expression,如果要跳出循环,可以使用break命令,若要跳至循环中的下一轮迭代,需要使用next命令;如果在循环中不包括break命令,R代码将会是一个无限循环。
因此,常用的结构如下:
1
2
3
4
5
6
|
repeat {
expression
if (condition){
break
}
}
|
举例如下:
1
2
3
4
5
6
7
8
9
10
|
# 求1-100的和
i <- 1
sum_100 <- 0
repeat {sum_100 = sum_100 + i
i=i+1
if (i>100){
print (sum_100)
break
}
}
|
2.while结构:在某个条件为真时,重复某一特定的表达式
1
|
while (condition) expression
|
举例如下:
1
2
3
4
5
|
> i <- 1
> sum_100 <- 0
> while (i<=100){sum_100=sum_100+i;i=i+1}
> print (sum_100)
[1] 5050
|
3. for循环结构可以遍历向量或者列表中的每个元素:
1
|
for (var in list) expression
|
举例如下:
1
2
3
|
> for (i in seq (from=1,to=100,by=1)) sum_100=sum_100+i
> sum_100
[1] 5050
|
4.循环扩展
我们都知道C#或者java等现代编程语言中,都会有foreach等迭代器。R语言本身并没有提供这样的机制,不过我们可以通过R语言添加包来实现
(1)迭代器:从另外一个对象中返回元素的抽象对象。使用迭代器可以使代码具有更好的可读性同时易于并行执行。添加R语言扩展包iterators可以实现迭代器功能。迭代器可以返回向量、数组、数据框或者其他对象的元素,当然也可以返回函数。
1
2
3
4
|
iter (obj,checkFunc= function (...) TRUE ,recycle= FALSE ,...)
# obj 指定对象
# checkFunc 指定一个过滤迭代器返回值的函数
# recyle 指定当对象元素迭代完成之后是否对迭代进行重置
|
举例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
> iter_one <- iter (1:10,checkFunc= function (x) x%%2==0,recycle=F)
> nextElem (iter_one) #nextElem()函数用来查看下一个迭代项,这个函数会隐式地调用checkFunc,如果下一个值符合checkFunc,则返回该值,否则将迭代下一个值,直至找到一个符合checkFunc的值或者将所有值都迭代完毕
[1] 2
> nextElem (iter_one)
[1] 4
> nextElem (iter_one)
[1] 6
> nextElem (iter_one)
[1] 8
> nextElem (iter_one)
[1] 10
> nextElem (iter_one)
Error: StopIteration #由于设定了recycle=F(也是默认值),迭代完成后,再次调用nextElem()函数将会出现Error:StopIteration.如果设置recycle=T,此时迭代将重置,再次输出2,4,6,8,10
|
(2)foreach循环:该功能通过R语言扩展包foreach实现,foreach能够循环遍历某个对象(向量、矩阵、数据框或者迭代器)中的多个元素,针对各个元素执行表达式,并返回结果。
1
2
3
4
5
6
|
foreach (..., .combine, .init, .final= NULL , .inorder= TRUE ,
.multicombine= FALSE ,
.maxcombine= if (.multicombine) 100 else 2,
.errorhandling= c ( 'stop' , 'remove' , 'pass' ),
.packages= NULL , .export= NULL , .noexport= NULL ,
.verbose= FALSE )
|
真正执行foreach循环,需要使用%do%或者%dopar%运算符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
> i_square <- foreach (i=1:5) %do% i^2
> i_square
[[1]]
[1] 1
[[2]]
[1] 4
[[3]]
[1] 9
[[4]]
[1] 16
[[5]]
[1] 25
|
%do%运算符顺序执行表达式,而%dopar%运算符可以用来并行执行表达式。
五、R语言中的break,next
(1)R语言存在next语句
当我们想跳过循环的当前迭代而不终止它时便可使用next。 遇到next时,R解析器跳过本次迭代,并开始循环的下一次迭代。
语法
在R中创建Next语句的基本语法是 -
next
流程图
例
v <- LETTERS[1:6]
for ( i in v) {if (i == "D") {next}print(i)
}
当上面的代码被编译和执行时,它产生以下结果 -
[1] "A"
[1] "B"
[1] "C"
[1] "E"
[1] "F"
(2)R语言中的break语句有以下两种用法:
- 当在循环中遇到break语句时,循环立即终止,并且程序控制在循环之后的下一语句处恢复。
- 它可以用于终止switch语句中的情况(在下一章中讨论)。
语法
在R中创建break语句的基本语法是 -
break
流程图
例
v <- c("Hello","loop")
cnt <- 2repeat {print(v)cnt <- cnt + 1if(cnt > 5) {break}
}
当上面的代码被编译和执行时,它产生以下结果 -
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
R语言-循环repeat,while,for,foreach,iter,next,break相关推荐
- R语言使用Repeat函数多次执行代码块内的语句,实现循环执行任务的功能:repeat没有提供任何检查条件,所以编码者必须给出退出重复循环的条件(一般使用if和break)
R语言使用Repeat函数多次执行代码块内的语句,实现循环执行任务的功能:repeat没有提供任何检查条件,所以编码者必须给出退出重复循环的条件(一般使用if和break) 目录
- R语言循环语句while和repeat
R语言循环语句 1.for语句 2.while循环语句 3.repeat语句 4.举例 5.引用 看完如果对你有帮助,感谢点赞支持! 如果你是电脑端,看到右下角的 "一键三连" 了 ...
- R语言循环函数编写三境界
1. 三境界 R语言写循环有三境界: 手动for循环 apply系列 purrr泛函式编程 其中,手动for循环我最常用,apply系列半吊子,purrr函数越用越趁手,这里介绍一下purrr编写循环 ...
- R语言——循环判断语句
1. if/else判断语句 格式: 示例: 2. if/else if/else if/else多重判断语句 格式: 示例: 3.ifelse语句 格式: 示例: 4.switch分支语句 格式:s ...
- R语言循环、连续检验
以正态检验为例 设置工作环境后 读取数据: A <- read.csv("data.csv") 加载包 library(nortest) 查看变量 names(A) 设置一个 ...
- R语言 循环读取数据文件 循环读取csv tsv xlsx数据
读取数据,XLSX 或者 TSV 或者 CSV [1]先读取一个试下,确认能正确读取进去 下面三种格式提供参考 data <- read_excel("C:/XXX/1.xlsx&qu ...
- R语言循环处理数据框
目标汇总23个数据,格式如下: 先宽表变长表 library(openxlsx) library(reshape) setwd("C:\\Users\\admin\\Desktop\\合表& ...
- c语言 循环语句中的终止命令,Shell break和continue命令
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,像大多数编程语言一样,Shell也使用 break 和 continue 来跳出循环. break命令 break命令允许跳出所有循环(终止 ...
- R语言学习day2丨三大法宝:判断、循环、函数
本次笔记分享R语言中判断语句.循环使用方法 R语言判断语句 判断结构指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句和条件为假时要执行的语句. R语言中的判断语句: if > if( ...
最新文章
- 复旦大学把衣服变成了显示器,能聊天能导航,水洗弯折都不怕 | Nature
- 关于RF中类似于异常(TRY语句)情况的处理
- spring核心配置文件引入外部properties文件和另外的xml配置文件
- .net core webapi 列表返回指定的字段_ADO.NET 使用初探之SQL操作 | C# 数据操作系列...
- 荐书 | 攻克世纪难题,拒绝领取菲尔兹奖的孤独数学天才的一生
- c++——优先队列(priority_queue)
- Python项目实战:带领你爬取sexy的福利图片
- 智能手表开发API接口
- jvm莫名退出问题解决
- java中值滤波_Java实现图像中值滤波
- linux更新软件时,白天速度远超晚上
- linux安装Hive(Hive-2.3.7)
- 苹果7信号天线内部位置_苹果7信号天线内部位置_除了芯片还有天线!手机后壳换玻璃也是为5G准备...
- matlab计算复活节概率,复活节是几月几日_计算复活节日期_我爱历史网
- ros-noetic-yocs-cmd-vel-mux
- 加速编码的17款最棒的CSS工具
- 网站搭建之三(APMServ5.2.6)
- 服务器系统可以备份,服务器操作系统可以备份吗
- 菜鸟python教程,菜鸟的python之路(一)
- 云计算的优势和未来发展趋势
热门文章
- Net.createConnection is not a function
- 如何从已发表的论文作者中去掉自己的名字?
- web of science 中批量导出文件ciw到endnote时,没反应怎么操作
- 云计算:探索现代科技的未来之云
- 以图识图——基于内容的图片检索CBIR(Content Based Image Retrieval)
- MATLAB作图|fig图中增加细节图
- 写给小白看的线程池,还有10道面试题
- mysql如何配置phpmyadmin_如何进行phpmyadmin配置 phpmyadmin快速配置方法【详细介绍】...
- 甲骨文CEO埃里森的教战守则
- centos7 apache 安装配置步骤