14.3 ifelse() 함수
위와 같이 명령문에서 한 줄의 코드만 실행되는 간단한if ... else 문은 간단한 대체적인 방식으로 작성될 수 있습니다. 다음 대안은 매우 짧은ifelse() 함수의 사용 예입니다.
ifelse() 함수의 형식은 다음과 같습니다.
ifelse(test, yes, no)
- test : 조건식입니다.
- yes : 조건식이 TRUE 일 때 실행되는 TRUE 블럭에 해당합니다.
- no : 조건식이 FALSE일때 실행되는 FALSE 블럭에 해당합니다.
여기서 test는 논리형 벡터 (또는 논리로 강제 변환 될 수있는 개체)여야 합니다. 반환 값은 test와 길이가 같은 벡터입니다.
이 ifelse() 함수에 의해 반환되는 벡터는 test의 값이 TRUE 인 경우 yes의 요소가 되고, test의 값이 FALSE 인 경우 no의 요소가 됩니다.
즉, test[i]가 TRUE이면 결과의 i 번째 요소는 yes[i]가 됩니다. FALSE이면 no[i]의 값을 반환하게 됩니다. 벡터 yes와 no는 필요할 때마다 자동 채우기(recycling)가 됩니다.
ifelse() 함수의 사용에 대한 간단한 예를 들어 보겠습니다.
# 벡터 a의 요소들이 짝수이면 "even", 홀수 이면 "odd"를 반환합니다.
a <- c(5, 7, 2, 9) # 예제 벡터입니다.
ifelse(a %% 2 == 0, "even", "odd") # a %% 2 == 0 벡터 나머지 연산을 하여 결과를 반환합니다.## [1] "odd" "odd" "even" "odd"
위의 예에서 test에 해당하는 a %% 2 == 0의 반환결과는 논리형 벡터로 (FALSE, FALSE, TRUE, FALSE)가 됩니다.
마찬가지로 함수 인수의 다른 두 벡터인 yes와 no는 각각 ( "even", "even", "even", "even") 과 ( "odd", "odd", "odd", "odd")로 자동 채우기가 됩니다. 따라서 결과는 test가 반환하는 벡터의 요소 값에 따라 평가가 되어 최종 결과로 (“odd”, “odd”, “even”, “odd”)가 반환됩니다.
앞에서 살펴본 예를 ifelse() 함수를 이용하면 간단하게 작성할 수 있습니다.
x <- c(8, 3, 2, 5)
# ifelse() 함수의 이용 방법
ifelse(any(x < 0), "x contains negative numbers", "x contains all positive numbers")## [1] "x contains all positive numbers"