1.11 R 문제 해결
지금까지 R을 사용하면서 많은 (그리고 종종 매우 창의적으로) 에러를 만드는 동안, 종종 저지르는 세 가지의 간단한 것들이 있다. 이를 정리하면 다음과 같다:
- 대문자(Capitalization)의 사용. R은 대소문자를 구분한다. 예를 들어, 그래프의 노드 이름으로 “Jack”과 “jack”은 다르다. 함수
rowSums
는rowsums
또는RowSums
로 사용하면 작동하지 않을 것이다. - 개체 클래스(Object class). 많은 함수들이 인수로 다양한 것들을 처리할 수 있지만, 숫자 벡터 대신에 문자 벡터나 factor를 요구하거나, 또는 데이터 프레임 대신에 행렬을 요구할 수 있다. 함수들은 때때로 기대치 않은 형식으로 결과를 반활하기도 할 것이다.
- 패키지(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()
등을 이용할 수 있다.