더북(TheBook)

4.2.4 벡터화된 if: ifelse

ifelse() 함수는 다른 방법으로 계산을 분기한다. 이 함수는 논리형 벡터를 조건으로 받아 다시 벡터를 반환한다. 논리형 벡터의 각 요소 값이 TRUE이면 두 번째 yes 인수에 해당하는 요소가 선택된다. 값이 FALSE이면 세 번째 no 인수에 해당하는 요소가 선택된다. 즉, ifelse()if의 벡터화된 버전이라고 볼 수 있다. 다음 예제로 살펴보자.

> ifelse(c(TRUE, FALSE, FALSE), c(1, 2, 3), c(4, 5, 6))
[1] 1 5 6

yesno 인수는 재활용이 가능하므로 ifelse()를 사용하여 check_positive()를 다음과 같이 만들 수 있다.

> check_positive2 <- function(x) {
+     ifelse(x, 1, 0)
+ }

if 문을 사용한 check_positive() 함수와 ifelse를 사용한 check_positive2() 함수 사이에는 미묘한 차이가 있다. check_positive(-1)은 명시적인 반환값을 갖지 않지만 check_positive2(-1)은 0을 반환한다. else 구문이 없는 한 if 조건을 만족할 때만 명시적인 반환값을 갖게 된다. 이와 반대로 ifelse()yes/no 인수를 모두 지정해야 하기 때문에 항상 결과 벡터를 반환한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.