더북(TheBook)

test_direction 함수에 있는 &&&로 대체하여 test_direction2 함수를 만든다면 다음 형태가 될 것이다.

> test_direction2 <- function(x, y, z) {
+     if (x < y && y < z) 1
+     else if (x > y && y > z) -1
+     else 0
+ }

이제 두 함수는 서로 다른 성질을 보이겠지만, 여전히 스칼라 입력에서는 같은 결과를 보인다.

> test_direction2(1, 2, 3)
[1] 1

그러나 다중 요소 입력에서는 각 입력 벡터의 두 번째 요소부터 조용히 무시되며, 어떤 경고도 발생시키지 않는다.

> test_direction2(c(1, 2), c(2, 3), c(3, 4))
[1] 1

결국 &&& 가운데 무엇을 사용하는 것이 맞을까? 무엇을 원하는지에 따라 달라질 것이다. 모든 상황에서 어떤 결과를 기대하는가? 생각하는 입력이 스칼라 값인가 아니면 다중 요소 벡터인가? 각 입력 벡터의 모든 위치에 존재하는 요소들이 단조성을 갖는지 알아보고 싶을 때 이 두 연산자는 모두 적당하지 않다. 다음 절에서 다룰 논리 집계 함수를 사용해야 할 것이다.

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