더북(TheBook)

또 기억해야 할 것은 ifelse() 함수와 if 구문을 단순히 서로 바꾸어 사용한다고 해서 항상 결과가 동일하지 않다는 점이다. 예를 들어 조건에 따라 두 요소 벡터를 반환한다고 가정하자. ifelse()를 사용하는 경우를 생각해 보자.

> ifelse(TRUE, c(1,2), c(2,3))
[1] 1

yes 인수의 첫 번째 요소만 반환된다. yes 인수에 할당된 벡터를 그대로 반환하려면 c(TRUE, TRUE)로 조건을 수정해야 한다. 이 방법은 별로 자연스럽지 않다.

다음과 같이 if 문을 사용하면 식이 훨씬 자연스럽다.

> if (TRUE) c(1,2) else c(2,3)
[1] 1 2

벡터화된 입출력을 다룰 때 또 다른 문제점이 있다. 예를 들어 yes 인수가 수치형 벡터고 no 인수가 문자형 벡터인 경우, 조건에 TRUEFALSE 값이 섞여 있으면 출력 값이 모두 한 벡터에 담길 수 있도록 타입 변환을 통해 모든 요소의 타입을 일치시켜야 한다. 따라서 결국 문자형 벡터가 만들어진다.

> ifelse(c(TRUE, FALSE), c(1, 2), c("a", "b"))
[1] "1" "b"
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.