цикл do-while в R
Мне было интересно, как написать цикл do-while-style?
нашел этот пост:
вы можете использовать repeat{} и проверить условия везде, где используется if() и выйдите из цикла с управляющим словом "break".
Я не уверен, что это точно означает. Может кто-нибудь уточнить, понимаете ли вы это и/или если у вас есть другое решение?
4 ответа:
довольно понятны.
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 (инициализированную в TRUE), а затем проверяя наше фактическое состояние позже в операторе if. Можно также использовать ключевое слово break вместо continue
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-while (via
!
или принимая отрицание), то искаженные ситуации (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
Я еще настаивайте на том, что без отрицания условия в do-while ответ Сальседо неверен. Это можно проверить, удалив символ отрицания в приведенном выше коде.