R语言——循环

参考资料:学习R

在R中有三种循环:repeat、while和for。虽然向量化意味着我们可能并不需要大量使用它们,但在需要重复执行代码时,它们是非常有用的。

1、重复循环

R中最容易掌握的循环是repeat。它所做的事情就是反复地执行代码,直到告诉它停为止。下面这个代码将反复执行,直到我们按下escape键、退出R为止。

R 复制代码
repeat{
  message("Happy Groundhog Day!")
}

一般来说无限循环不是我们想要的,因此需要一个break语句来跳出无限循环。下例中,sample函数将在每个循环迭代中返回一个操作:

R 复制代码
repeat{
  message("Happy Groundhog Day!")
  action<-sample(
    c(
      "Learn French",
      "Make an ice status",
      "Rob a bank",
      "Win heart of Andie McDowell"
    ),
    1
  )
  message("action= ", action)
  if(action=="Win heart of Andie McDowell") break
}

有时候,我们想做的不是退出整个循环,而是跳出当前的迭代,开始next一下次迭代而已:

R 复制代码
repeat{
  message("Happy groundhog Day")
  action<-sample(
    c(
      "Learn French",
      "Make an ice statue",
      "Rob a bank",
      "Win heart of Andie McDowell"
    ),
    1
  )
  if(action=="Rob a bank"){
    message("Quietly skipping to the next iteration")
    next
  }
  message("action= ",action)
  if(action=="Win heart of Andie McDowell") break
}

2、while循环

while循环就像是延迟了的repeat循环。它不是先执行代码再检查循环是否应该结束,而是先进行检查再执行代码。因为检查发生在开始时,所以循环体可能不会被执行。如下:

R 复制代码
action<-sample(
  c(
    "Learn French",
    "Make an ice statue",
    "Rob a bank",
    "Win heart of Andie McDowell"
  ),
  1
)
while(action!="Win heart of Andie McDowell"){
  message("Happy Groundhog Day!")
  action<-sample(
    c(
      "Learn French",
      "Make an ice statue",
      "Rob a bank",
      "Win heart of Andie McDowell"
    ),
    1
  )
  message("action= ",action)
}

3、for循环

这种循环适用于已知代码所需执行的循环次数的情形。for循环将接受一个迭代器变量和一个向量参数。在每个循环中,迭代器变量会从向量中取得一个值。最简单的情况下,该向量只包含整数:

R 复制代码
for(i in 1:5) message("i= ",i)

如果我们想执行多个表达式,与其他循环一样,须使用大括号把他们括起来:

R 复制代码
for(i in 1:5){
  j<-i^2
  message("j= ",j)
}

R的for循环非常灵活,因为它们的输入并不限于整数或数字,还可以传入字符向量、逻辑向量或列表:

R 复制代码
for (month in month.name){
  message("The month of ",month)
}

for(yn in c(TRUE,FALSE,NA)){
  message("This statement is ",yn)
}
l<-list(
  pi,
  LETTERS[1:5],
  charToRaw("not as complicated as it looks"),
  list(TRUE)
)
for (i in l){
  print(i)
}

因为for循环操作于向量中的每个元素,所以它提供了一种"伪向量化"。注意,R的for循环几乎总是比其对应的向量化运行得要慢,而且往往是一到两个数量级的差别。这意味着我们应尽可能地使用向量化。

相关推荐
jiang_changsheng2 天前
环境管理工具全景图与深度对比
java·c语言·开发语言·c++·python·r语言
JicasdC123asd2 天前
使用Faster R-CNN模型训练汽车品牌与型号检测数据集 改进C4结构 优化汽车识别系统 多类别检测 VOC格式
r语言·cnn·汽车
请你喝好果汁6412 天前
## 学习笔记:R 语言中比例字符串的数值转换,如GeneRatio中5/100的处理
笔记·学习·r语言
怦怦蓝2 天前
DB2深度解析:从架构原理到与R语言的集成实践
开发语言·架构·r语言·db2
新新学长搞科研2 天前
【CCF主办 | 高认可度会议】第六届人工智能、大数据与算法国际学术会议(CAIBDA 2026)
大数据·开发语言·网络·人工智能·算法·r语言·中国计算机学会
Piar1231sdafa3 天前
战斗车辆状态识别与分类 --- 基于Mask R-CNN和RegNet的模型实现
r语言·cnn
陳土3 天前
R语言Offier包源码—1:read_docx()
r语言
善木科研喵3 天前
IF5.9分,α-硫辛酸如何缓解化疗神经毒性?网络毒理学结合网络药理学双重锁定关键通路!
数据库·数据分析·r语言·sci·生信分析·医学科研
Piar1231sdafa4 天前
椅子目标检测新突破:Cascade R-CNN模型详解与性能优化_1
目标检测·r语言·cnn
Loacnasfhia94 天前
基于Mask R-CNN与RegNetX的钢水罐及未定义物体目标检测系统研究_1
目标检测·r语言·cnn