[R] 반복문(for,while,repeat)

반응형
    반응형

    R에서의 반복문입니다.
    반복문은 특정 명령을 반복하게 만드는 구문입니다.
    for,while,repeat 이 있는데 각각 쓰는 방식이 다릅니다.
    각 특성에 맞게 쓰면 효과적으로 반목문을 구사할 수 있습니다.

    for 문

    for문은 주어진 범위 안에서 반복을 실행하는 반복문입니다.
    즉, 반복 횟수를 정해야만 동작합니다.
    for문 작성 방법은 다음과 같이 소괄호 안에는 범위를 대표하는 변수와 해당범위를 지정하고 대괄호 안에 명령어를 씁니다.

    for (변수 in 범위){
    명령어
    }

    예를 보면 다음과 같습니다.

    > for (i in 1:3){
    +    print(i)
    +}
    
    [1] 1
    [2] 2
    [3] 3

    주의할 점은 종종 Rstudio에서 명령어가 복잡해지면 대괄호 인식이 잘 안되는 경우가 있습니다. 대괄호 이후에 코드 인덱스에 화살표 표시가 있는지 확인하시기 바랍니다.

     

    while 문

    while 문은 횟수를 지정하지 않고 조건이 참이면 계속해서 반복을 수행하는 반복문입니다. 조건식을 해주어야 하기 때문에 for문보다는 까다롭지만 메모리 절약을 할 수 있어서 while로 표현할 수 있다면 while로 표현하는 것이 좋습니다.

    while은 소괄호에 조건문을 쓰고 대괄호에 명령어를 작성해 완성할 수 있습니다.

     

    while(조건문){
    명령어
    }

     

    for문에서의 예제를 while로 쓰면 다음과 같이 쓸 수 있습니다.
    while문은 for문과 다르게 처음시작점과 반복횟수가 없습니다. 지정을 해주어야 합니다. 전역변수로 i를 지정하고 명령이 끝나면 i에 1이 더해지도록 합니다. while내에서 i가 1씩 더해진 값으로 동작하므로 반복효과를 낼 수 있습니다.

    > i = 1
    > while (i<=3){
    +  print(i)
    +  i=i+1
    }
    
    [1] 1
    [2] 2
    [3] 3

     

    repeat 문

    repeat은 명령어를 반복해서 수행하다가, 특정 상황에 종료시킬 때 사용합니다. while과 비슷한데 조건문을 안쓰고 쓸 수 있습니다. 그보다는 탈출조건을 만들어서 코드 진행을 멈추는 방식입니다. 조건문을 작성하지 않아도 되어서 while 보다는 작성방법이 간단합니다.

    repeat{
    명령어
    }

     

    repeat은 탈출조건에 대한 명령어를 따로 만들지 않는데 명령어 중간에 if문으로 탈출조건을 직접 만들어서 합니다.
    if 문을 쓴다고 당연히 탈출이 되는 건 아니고 탈출 명령어인 break를 작성해 반복을 멈춥니다.

    >i = 1
    >repeat{
    +  print(i)
    +  if (i>=3){
    +    break
    +  }
    +  i =i+1
    +}
    
    [1] 1
    [1] 2
    [1] 3

    사실상 while과 굉장히 흡사합니다. 그런데 조건식이 여러개로 작성되면서 while 처럼 반복횟수를 정하지 않는다면 repeat으로 하는 것이 편하게 됩니다.
    while보다 자유도가 높고 다양한 조건에 대응할 수 있도록 설계할 수 있습니다.

     

    관련 포스팅

    [R] 조건문 만들기(if, ifelse,switch)

    'R' 카테고리의 다른 글

    [R] 그래프 그리기(plot함수)  (0) 2022.05.26
    [R] tidyverse 간단소개 및 설치  (0) 2022.05.21
    [R] 조건문 만들기(if, ifelse,switch)  (0) 2022.05.18
    [R] 데이터 결합하기  (0) 2022.05.13
    [R] 데이터 프레임 다루기  (0) 2022.05.06

    댓글

    Designed by JB FACTORY

    ....