developer tip

R의 do-while 루프

copycodes 2020. 12. 29. 07:22
반응형

R의 do-while 루프


do-while 스타일 루프를 작성하는 방법에 대해 궁금합니다.

이 게시물을 찾았 습니다 .

repeat {}를 사용하고 if ()를 사용하여 조건을 확인하고 "break"제어 단어로 루프를 종료 할 수 있습니다.

정확히 무엇을 의미하는지 잘 모르겠습니다. 당신이 그것을 이해하거나 다른 해결책이 있다면 누군가가 자세히 설명해 주시겠습니까?


꽤 자명하다.

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_whileR에서 별도의 구조로 존재하지 않지만 다음과 같이 속일 수 있습니다.

repeat( { expressions}; if (! end_cond_expr ) {break} )

도움말 페이지를 보려면 ?while또는 ?repeat콘솔에서 입력 할 수없고 대신 ?'repeat'또는 을 사용해야 ?'while'합니다. 를 포함한 모든 "control-constructs" if는 동일한 페이지에 있으며 "?"뒤에 문자 인용이 필요합니다. 그래서 인터프리터는 그것들을 불완전한 코드로 보지 않고 계속 "+"를 제공합니다.


다른 답변을 바탕으로 while 루프 구조를 사용하여 do-while 동작을 달성하는 예제를 공유하고 싶었습니다. while 조건 (TRUE로 초기화 됨)에서 간단한 부울 변수를 사용한 다음 나중에 if 문에서 실제 조건을 확인합니다. if 문 내에서 continue <-FALSE 대신 break 키워드를 사용할 수도 있습니다 (아마 더 효율적일 것입니다).

  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에서 조건을 부정하지 않으면 ( !또는 부정을 통해 ), 코드 과정에 따라 왜곡 된 상황 (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

나는 여전히 조건을 부정하지 않으면 Salcedo의 대답이 틀렸다고 주장합니다. 위 코드에서 부정 기호를 제거하여이를 확인할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/4357827/do-while-loop-in-r

반응형