R 언어 정의 - if/else 조건문

R 언어 정의 - if/else 조건문

R에서 if/else 문이 조건에 따라 문장을 선택하고 값을 돌려주는 방식을 알아볼게요. 조건의 타입과 첫 번째 요소만 사용하는 규칙, 중첩까지 함께 정리해요.

출처: 문서

본문

3.2.1 if

if/else 문은 두 개의 문장을 조건부로 평가해요. 조건이 평가되고, 그 TRUE라면 첫 번째 문장이 평가되고, 그렇지 않으면 두 번째 문장이 평가돼요. if/else 문은 선택된 문장의 값을 자기 자신의 값으로 돌려줘요. 공식적인 문법은 다음과 같아요.

if ( statement1 )
    statement2
else
    statement3

먼저 statement1이 평가되어 value1을 만들어요. value1이 논리형 벡터이고 첫 번째 요소가 TRUE라면 statement2가 평가돼요. value1의 첫 번째 요소가 FALSE라면 statement3이 평가돼요. value1이 수치형 벡터라면, 첫 번째 요소가 0일 때 statement3이 평가되고 그 외에는 statement2가 평가돼요. value1의 첫 번째 요소만 사용되고, 나머지 요소들은 무시돼요. value1이 논리형 벡터나 수치형 벡터가 아닌 다른 타입이라면 오류가 발생해요.

if/else 문은 음수의 로그를 취하는 것 같은 수치적 문제를 피하기 위해 사용할 수 있어요. if/else 문도 다른 문장과 마찬가지로 하나의 문장이기 때문에, 그 값을 변수에 할당할 수도 있어요. 아래 두 예시는 동일해요.

> if( any(x <= 0) ) y <- log(1+x) else y <- log(x)
> y <- if( any(x <= 0) ) log(1+x) else log(x)

else 절은 선택 사항이에요. if(any(x <= 0)) x <- x[x <= 0] 문장도 유효해요. if 문이 블록 안에 있지 않을 때, else가 있다면 statement2의 끝과 같은 줄에 있어야 해요. 그렇지 않으면 statement2 끝의 줄바꿈이 그 if를 완성시키고, 문법적으로 완전한 문장으로 평가되어 버려요. 간단한 해결책은 중괄호로 감싼 복합 문장을 사용하고, 문장의 끝을 나타내는 닫는 중괄호와 같은 줄에 else를 두는 거예요.

if/else 문은 중첩될 수 있어요.

if ( statement1 ) {
    statement2
} else if ( statement3 ) {
    statement4
} else if ( statement5 ) {
    statement6
} else
    statement8

짝수 번호 문장들 중 하나가 평가되고, 그 결과 값이 반환돼요. 선택적인 else 절이 생략되었는데 모든 홀수 번호 statement들이 FALSE로 평가된다면, 어떤 문장도 평가되지 않고 NULL이 반환돼요.

홀수 번호 statement들은 순서대로 평가되다가, 하나가 TRUE로 평가되면 그에 대응하는 짝수 번호 statement가 평가돼요. 이 예시에서 statement6statement1FALSE이고 statement3FALSE이며 statement5TRUE일 때만 평가돼요. 허용되는 else if 절의 개수에는 제한이 없어요.

더 알아보기 (Learn more)

출처: R Language Definition - 3.2.1 if