name - bucle do-while en R
r concatenate variable name (4)
Me preguntaba cómo escribir el ciclo do-while-style?
Encontré esta publicación :
puede usar repeat {} y verificar las condiciones donde sea usando if () y salir del loop con la palabra de control "break".
No estoy seguro de lo que significa exactamente. ¿Puede alguien explicar si lo comprende y / o si tiene una solución diferente?
Bastante auto explicativo.
repeat{
statements...
if(condition){
break
}
}
O algo así, pensaría. Para obtener el efecto del ciclo do while, simplemente verifique su condición al final del grupo de instrucciones.
Notar que el enfoque perfecto del usuario 42 es
* "do while" = "repetir hasta que no"
* La equivalencia del código:
do while (condition) # in other language
..statements..
endo
repeat{ # in R
..statements..
if(! condition){ break } # Negation is crucial here!
}
} no recibió suficiente atención por parte de los demás, enfatizaré y presentaré su enfoque a través de un ejemplo concreto. Si uno no niega la condición en do-while (vía !
O tomando negación), entonces existen situaciones distorsionadas (1. persistencia de valor 2. ciclo infinito) dependiendo del curso del código.
En Gauss:
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
En 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
Sigo insistiendo en que sin la negación de la condición en "do-while", la respuesta de Salcedo es incorrecta. Se puede verificar esto mediante la eliminación del símbolo de negación en el código anterior.
Sobre la base de las otras respuestas, quería compartir un ejemplo del uso de la construcción while loop para lograr un comportamiento do-while. Al usar una variable booleana simple en la condición while (inicializada a VERDADERO), y luego verificar nuestra condición actual más adelante en la declaración if. También se podría usar una palabra clave break en lugar de continue <- FALSE dentro de la declaración if (probablemente más eficiente).
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
}
}
Ver ?Control
o la definición del lenguaje R:
> y=0
> while(y <5){ print( y<-y+1) }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
Así que do_while
no existe como una construcción separada en R, pero puedes do_while
con:
repeat( { expressions}; if (! end_cond_expr ) {break} )
Si desea ver la página de ayuda, no puede escribir ?while
o ?repeat
en la consola, sino que debe usar ?''repeat''
o ?''while''
. Todas las "construcciones de control", incluso if
están en la misma página y todas necesitan una cita de carácter después del "?" entonces el intérprete no los ve como un código incompleto y le da una continuación "+".