1.11 R 문제 해결

지금까지 R을 사용하면서 많은 (그리고 종종 매우 창의적으로) 에러를 만드는 동안, 종종 저지르는 세 가지의 간단한 것들이 있다. 이를 정리하면 다음과 같다:

  1. 대문자(Capitalization)의 사용. R은 대소문자를 구분한다. 예를 들어, 그래프의 노드 이름으로 “Jack”과 “jack”은 다르다. 함수 rowSumsrowsums 또는 RowSums로 사용하면 작동하지 않을 것이다.
  2. 개체 클래스(Object class). 많은 함수들이 인수로 다양한 것들을 처리할 수 있지만, 숫자 벡터 대신에 문자 벡터나 factor를 요구하거나, 또는 데이터 프레임 대신에 행렬을 요구할 수 있다. 함수들은 때때로 기대치 않은 형식으로 결과를 반활하기도 할 것이다.
  3. 패키지(Package namespaces). 종종 같은 이름을 갖는 함수들을 여러 개의 패키지가 포함하고 있을 때 문제들이 발생한다. R은 이에 대해 경고한다. “The following object(s) are masked from ‘package:igraph’ as you load a package.” 이를 처리하기 위한 한 방법은 함수를 사용할 때 ::를 이용하여 패키지를 명시하는 것이다. 예를 들어, blash() 라는 함수가 패키지 A와 패키지 B에 존재한다면, A::blash()B::blash() 등과 같이 함수를 호출할 수 있다. 문제가 좀 더 복잡한 다른 경우에는 패키지를 특별한 순서로 불러오거나 아니면 패키지들을 함께 사용하지 않는 것이다. 예를 들어, igraph 패키지와 statnet 패키지는 동시에 불러왔을 때 여러 문제들을 야기한다. 이때, 하나의 패키지를 불러오기 전에 다른 패키지를 detach() 함수로 메모리에서 제거하는 것이 최상의 방법이다.
 library(igraph)          # 패키지 불러오기
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
 detach(package:igraph)   # 패키지 메모리에서 제거하기

보다 더 많은 문제해결을 위해서는, try(), tryCatch(), 그리고 debug() 등을 이용할 수 있다.