12.3 흐름 제어

지금까지 우리는 본질적으로 개체를 생성하고 속성을 설정하고 결과를 검사했다. R 프로그래밍에는 루프를 사용하여 코드를 분기하고 코드를 반복하는 방법도 포함하고 있다.

12.3.1 If-then

if-then 문은 특정 개체의 상태에 따라 다른 작업을 수행하도록 프로그램에 지시한다. 다음은 if-then 문의 한 예이다.

state <- "startup"
if(state == "startup") {
print("We are about to start the program")
    state = "running program"
} else {
    print("Program running")
}
## [1] "We are about to start the program"

“startup”값을 가진 state라는 개체가 있다. 다음 코드 줄은 state 개체를 평가하고 개체의 값이 “startup”과 같으면 if 문 바로 뒤의 중괄호 안의 코드가 실행된다. state 메시지가 인쇄되고 state 개체의 값이 변경된다.

state 객체가 “startup”이 아닌 경우 else 키워드 뒤의 코드가 실행된다. 여기서 프로그램은 단순히 “Program running”이라는 메시지를 출력한다.

위의 예에서 == 연산자를 사용하여 두 값이 같은지 테스트했다. 부등식을 사용하여 테스트 할 수도 있다 : !=, >, <, >=, <=.

한 줄의 코드에서 if-else를 사용할 수도 있으며 간결한 코드가 있으면 잘 작동한다. 예를 들어 state 개체를 테스트하여 `startup" 모드에 있는지 확인하려면 다음과 같이하면 된다.

ifelse(state == "startup", TRUE, FALSE)
## [1] FALSE

state가 “startup”이면 부울 값이 TRUE이다. 그렇지 않으면 부울 값 FALSE를 얻는다. 부울은 TRUE 또는 FALSE 일 수있는 특수한 유형의 객체이며 이와 같은 조건을 테스트하는 데 사용된다.

12.3.2 반복문

루프는 동일한 코드를 다시 반복하는 방법을 제공한다. R에서 사용할 수 있는 두 가지 유형의 루프가 있다. for 루프와 while 루프이다. 또한 루프와 유사한 동작을 제공하는 apply() 함수 군을 사용한다. 루프가 어떻게 작동하는지 살펴 보기로 한다.

12.3.2.1 For 루프

For 루프는 지정된 횟수만큼 실행된다. 예를 들어, 코드를 5 번 반복하려면 다음과 같이 할 수 있다.

for (i in 1:5){
        print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

이 코드는 1에서 5까지의 숫자를 출력한다.이 코드는 for 키워드로 구성되며 괄호 안에는 루프에서 우리가 어디에 있는지 추적하는 개체 i있다. 1:5는 1에서 5까지의 모든 숫자에 대한 R 의 단축어이다. 이 루프는 5 번 실행되며 중괄호 사이의 코드는 각 i의 값에 따라 다음의 출력을 생성한다.

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

12.3.2.2 While 루프

While 루프는 코드를 반복적으로 실행한다. 그러나 고정된 횟수를 실행하는 대신 조건이 충족 될 때까지 이러한 루프가 실행된다. 다음은 while 루프를 사용하여 1에서 5까지 세는 방법을 보여준다.

i <- 0
while (i <= 5) {
    print(i)
    i <- i + 1
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

while 루프는 i 개체의 상태를 확인하고 i <= 5 조건이 거짓이 될 때까지 값을 콘솔에 출력한다. 루프가 반복 될 때마다 i 값이 1 씩 증가한다.