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相关推荐

  1. R语言使用Repeat函数多次执行代码块内的语句,实现循环执行任务的功能:repeat没有提供任何检查条件,所以编码者必须给出退出重复循环的条件(一般使用if和break)

    R语言使用Repeat函数多次执行代码块内的语句,实现循环执行任务的功能:repeat没有提供任何检查条件,所以编码者必须给出退出重复循环的条件(一般使用if和break) 目录

  2. R语言循环语句while和repeat

    R语言循环语句 1.for语句 2.while循环语句 3.repeat语句 4.举例 5.引用 看完如果对你有帮助,感谢点赞支持! 如果你是电脑端,看到右下角的 "一键三连" 了 ...

  3. R语言循环函数编写三境界

    1. 三境界 R语言写循环有三境界: 手动for循环 apply系列 purrr泛函式编程 其中,手动for循环我最常用,apply系列半吊子,purrr函数越用越趁手,这里介绍一下purrr编写循环 ...

  4. R语言——循环判断语句

    1. if/else判断语句 格式: 示例: 2. if/else if/else if/else多重判断语句 格式: 示例: 3.ifelse语句 格式: 示例: 4.switch分支语句 格式:s ...

  5. R语言循环、连续检验

    以正态检验为例 设置工作环境后 读取数据: A <- read.csv("data.csv") 加载包 library(nortest) 查看变量 names(A) 设置一个 ...

  6. R语言 循环读取数据文件 循环读取csv tsv xlsx数据

    读取数据,XLSX 或者 TSV 或者 CSV [1]先读取一个试下,确认能正确读取进去 下面三种格式提供参考 data <- read_excel("C:/XXX/1.xlsx&qu ...

  7. R语言循环处理数据框

    目标汇总23个数据,格式如下: 先宽表变长表 library(openxlsx) library(reshape) setwd("C:\\Users\\admin\\Desktop\\合表& ...

  8. c语言 循环语句中的终止命令,Shell break和continue命令

    在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,像大多数编程语言一样,Shell也使用 break 和 continue 来跳出循环. break命令 break命令允许跳出所有循环(终止 ...

  9. R语言学习day2丨三大法宝:判断、循环、函数

    本次笔记分享R语言中判断语句.循环使用方法 R语言判断语句 判断结构指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句和条件为假时要执行的语句. R语言中的判断语句: if > if( ...

最新文章

  1. 复旦大学把衣服变成了显示器,能聊天能导航,水洗弯折都不怕 | Nature
  2. 关于RF中类似于异常(TRY语句)情况的处理
  3. spring核心配置文件引入外部properties文件和另外的xml配置文件
  4. .net core webapi 列表返回指定的字段_ADO.NET 使用初探之SQL操作 | C# 数据操作系列...
  5. 荐书 | 攻克世纪难题,拒绝领取菲尔兹奖的孤独数学天才的一生
  6. c++——优先队列(priority_queue)
  7. Python项目实战:带领你爬取sexy的福利图片
  8. 智能手表开发API接口
  9. jvm莫名退出问题解决
  10. java中值滤波_Java实现图像中值滤波
  11. linux更新软件时,白天速度远超晚上
  12. linux安装Hive(Hive-2.3.7)
  13. 苹果7信号天线内部位置_苹果7信号天线内部位置_除了芯片还有天线!手机后壳换玻璃也是为5G准备...
  14. matlab计算复活节概率,复活节是几月几日_计算复活节日期_我爱历史网
  15. ros-noetic-yocs-cmd-vel-mux
  16. 加速编码的17款最棒的CSS工具
  17. 网站搭建之三(APMServ5.2.6)
  18. 服务器系统可以备份,服务器操作系统可以备份吗
  19. 菜鸟python教程,菜鸟的python之路(一)
  20. 云计算的优势和未来发展趋势

热门文章

  1. Net.createConnection is not a function
  2. 如何从已发表的论文作者中去掉自己的名字?
  3. web of science 中批量导出文件ciw到endnote时,没反应怎么操作
  4. 云计算:探索现代科技的未来之云
  5. 以图识图——基于内容的图片检索CBIR(Content Based Image Retrieval)
  6. MATLAB作图|fig图中增加细节图
  7. 写给小白看的线程池,还有10道面试题
  8. mysql如何配置phpmyadmin_如何进行phpmyadmin配置 phpmyadmin快速配置方法【详细介绍】...
  9. 甲骨文CEO埃里森的教战守则
  10. centos7 apache 安装配置步骤