R语⾔中有三种不同的循环结构--全⾯详细
R中有三种不同的循环结构:
它只是简单的重复同⼀个表达式:repeat expression,如果要跳出循环,可以使⽤break命令,若要跳⾄循环中的下⼀轮迭代,需要使⽤next命令;如果在循环中不包括break命令,R代码将会是⼀个⽆限循环。
因此,常⽤的结构如下:
1 2 3 4 5 6repeat {
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结构:在某个条件为真时,重复某⼀特定的表达式1while(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循环结构可以遍历向量或者列表中的每个元素:1for(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 4iter(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 6foreach(..., bine, .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%运算符
真正执⾏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语句的基本语法是 -
while循环语句的程序流程图
break
流程图
v <- c("Hello","loop")
cnt <- 2
repeat {
print(v)
cnt <- cnt + 1
if(cnt > 5) {
break
}
}
当上⾯的代码被编译和执⾏时,它产⽣以下结果 -
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"
[1] "Hello" "loop"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。