더북(TheBook)

이 함수는 입력 인수를 2개 받아 모두 수치형 벡터로 강제 변환한다. 앞 예제에서는 입력 인수가 모두 문자열이기 때문에 경고가 2개 발생했지만, 함수의 결괏값을 출력한 후에야 표시된다. 계산량이 많은 작업을 수행하려고 시간이 상당히 많이 걸릴 때도 최종 결과를 얻고 나서야 경고 메시지가 표시된다. 하지만 사실 계산 결과는 처음부터 정확한 결과에서 벗어나 있었다.

이때는 warn = 1을 사용하자. 경고가 발생하는 순간 경고 메시지를 바로 출력한다.

> options(warn = 1)
> f("hello", "world")
Warning in f("hello", "world") : NAs introduced by coercion
Warning in f("hello", "world") : NAs introduced by coercion
[1] NA

결과는 같지만 경고 문구는 결과보다 앞에 나온다. 시간이 오래 걸리는 함수는 경고 메시지를 먼저 볼 수 있으니 코드 실행을 멈출지 결정할 수 있고, 뭐가 잘못되었는지도 파악할 수 있다.

경고 레벨을 더 엄격하게 할 수도 있다. warn = 2는 경고를 직접적인 오류로 간주한다.

> options(warn = 2)
> f("hello", "world")
Error in f("hello", "world") :
  (converted from warning) NAs introduced by coercion

이러한 옵션은 전역 환경에 영향을 미친다. 따라서 모든 R 세션을 공통으로 관리하기에는 편리하지만 옵션을 변경하는 것은 그만큼 위험할 수 있다. 작업 디렉터리를 변경하면 스크립트 안의 모든 상대 경로가 제대로 실행되지 않을 수 있는 것처럼, 전역 옵션을 변경하면 전역 옵션과 호환되지 않는 모든 후속 코드가 제대로 동작하지 않을 수 있다.

일반적으로 절대적으로 필요한 경우가 아니라면 전역 옵션은 수정하지 않는 편이 좋다.

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