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 

我仍然坚持认为没有否定符号的情况下,萨尔塞多的答案是错误的。 可以通过在上面的代码中删除否定符号来检查。

Interesting Posts