题
我想知道如何编写do-ylile式循环?
我发现 这个帖子:
您可以使用重复{}并在使用if()的任何地方检查条件,并使用“断路”控制词退出循环。
我不确定这是什么意思。如果您理解和/或有不同的解决方案,有人可以详细说明吗?
解决方案
非常自我解释。
repeat{
statements...
if(condition){
break
}
}
或类似的东西。要获得循环时DO的效果,只需在声明组末尾检查您的状况即可。
其他提示
看 ?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
是否在同一页面上,所有人都需要字符引用“?”之后因此,解释器不会将它们视为不完整的代码,并为您提供延续的“+”。
在其他答案的基础上,我想分享一个使用时循环结构来实现DO-wile行为的示例。通过在段落条件(初始化为true)中使用简单的布尔变量,然后在以后在if语句中检查我们的实际条件。一个人还可以使用break关键字,而不是在if语句内部(可能更有效)中的继续< - 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 (condition) # in other language
..statements..
endo
repeat{ # in R
..statements..
if(! condition){ break } # Negation is crucial here!
}
} 我没有得到其他人的足够关注,我会通过一个具体的例子来强调并提出他的方法。如果一个人不以do-yile否定条件(通过 !
或通过否定),然后根据代码的过程,存在扭曲的情况(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
我 仍然 坚持认为,如果不否定疾病,则萨尔塞多的答案是错误的。可以通过上述代码中的删除否定符号来检查此问题。
不隶属于 StackOverflow