R中的do-while循环
我想知道如何编写do-while样式循环?
我发现这个职位 :
您可以使用repeat {}并检查使用if()的条件,并使用“break”控制字退出循环。
我不确定这究竟意味着什么。 有人可以详细说明,如果你了解它和/或如果你有不同的解决scheme?
漂亮的自我解释。
repeat{ statements... if(condition){ break } }
或者我会这么想的。 要获得do while循环的效果,只需在语句组的最后检查您的条件。
请参阅?Control
或R语言定义:
> y=0 > while(y <5){ print( y<-y+1) } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5
所以do_while
在R中不是作为一个单独的构造存在,而是可以用下面的方法来伪造:
repeat( { expressions}; if (! end_cond_expr ) {break} )
如果您想查看帮助页面,则无法在控制台上键入?while
或?repeat
,而是需要使用?'repeat'
或?'while'
。 所有“控制结构”(包括if
在同一个页面上,并且都需要在“?”之后引用字符。 所以译员不会将它们视为不完整的代码,并给你一个延续“+”。
基于其他答案,我想分享一个使用while循环构造来实现do-while行为的例子。 在while条件中使用一个简单的布尔variables(初始化为TRUE),然后在if语句中检查实际情况。 也可以在if语句中使用break关键字而不是continue < – FALSE(可能更有效)。
df <- data.frame(X=c(), R=c()) x <- x0 continue <- TRUE while(continue) { xi <- (11 * x) %% 16 df <- rbind(df, data.frame(X=x, R=xi)) x <- xi if(xi == x0) { continue <- FALSE } }
注意到用户42的完美方法{
*“do while”=“重复,直到不是”
*代码等价:
do while (condition) # in other language ..statements.. endo repeat{ # in R ..statements.. if(! condition){ break } # Negation is crucial here! }
}没有得到足够的重视,我将通过一个具体的例子来强调和提出他的方法。 如果不使用否定(!),则取决于代码的过程存在失真的情况(1.值持久性2.无限循环)。
在高斯:
proc(0)=printvalues(y); DO WHILE y < 5; y+1; y=y+1; ENDO; ENDP; printvalues(0); @ run selected code via F4 to get the following @ 1.0000000 2.0000000 3.0000000 4.0000000 5.0000000
在R:
printvalues <- function(y) { repeat { y=y+1; print(y) if (! (y < 5) ) {break} # Negation is crucial here! } } printvalues(0) # [1] 1 # [1] 2 # [1] 3 # [1] 4 # [1] 5
我仍然坚持认为没有否定符号的情况下,萨尔塞多的答案是错误的。 可以通过在上面的代码中删除否定符号来检查。