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"를 반환합니다.
<- c(5, 7, 2, 9) # 예제 벡터입니다.
a 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()
함수를 이용하면 간단하게 작성할 수 있습니다.
<- c(8, 3, 2, 5)
x
# ifelse() 함수의 이용 방법
ifelse(any(x < 0), "x contains negative numbers", "x contains all positive numbers")
## [1] "x contains all positive numbers"