문과와 빅데이터
직전 포스팅에서 install.packages("rJava")의 오류를 고민했다면,
이번에는 rJava패키지를 불러오기 시에 발생하는 오류를 알아보자.
<Error>
Error: package or namespace load failed for ‘rJava’:
.onLoad failed in loadNamespace() for 'rJava', details:
~~~~
Library not loaded : 경로/경로/경로/경로
아마도 메인 에러는 이것으로 나올 것이라 예상함.
이는 R의 라이브러리 폴더에 libjvm.dylib를 연결시키는 고리를 만들어 줘야 한다.
그 방법으로는 두 가지
1. R에서 dyn.load()
<Error>
call: dyn.load(file, DLLpath = DLLpath, …)
위의 에러가 있을 경우,
> dyn.load(paste0(system2('/usr/libexec/java_home', stdout = TRUE), '/jre/lib/server/libjvm.dylib'))
해당 명령문을 R 콘솔창에 입력해 두 경로를 연결 시킬 수 있게 한다.
하지만, 위 식을 입력했을 때 아래와 같은 에러가 뜬다면, 본인 컴퓨터에서의 libjvm.dylib의 위치를 잘못 설정했기 때문일 가능성이 있다.
<Error>
unable to load shared object '/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/jre/lib/server/libjvm.dylib'
- 이때 필요한 libjvm.dylib의 위치는 아래 명령문을 통해서 확인할 수 있음
> dir(paste0(system2('/usr/libexec/java_home', stdout = TRUE)))
2. 터미널에서 cd / ln
본인의 R 프로그램 버전과 Java 버전에 맞게 디렉토리를 지정하자.
R 3.4.4
Java 10.0.1
터미널에서 아래 두 명령문을 본인에게 맞게 차례로 입력한다.
cd /Library/Frameworks/R.framework/Versions/3.4/Resources/lib
ln -s /Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home/jre/lib/server/libjvm.dylib libjvm.dylib
본인 R 버전에 맞는 디렉토리를 설정하고 JVM 라이브러리에 그것을 연결하는 것
첫번째 경로는 R에서 확인 가능하고,
두번째 경로는 rJava 패키지 설치 시 터미널에서 확인했던 java home path의 하위 경로를 이용하면 된다.
이렇게 설정 후에
library(rJava)를 해주면 에러없이 불러올 수 있다.
그와 더불어 Java 기반의 패키지 함수들을 문제없이 가져올 수 있게 된다.
위의 두 가지 방법은 사실상 같은 방법을 다른 프로그램을 통해서 하는 느낌인데
나는 dyn.load()로는 에러가 떴고 그 다음 명시한 방법처럼 다시 경로를 입력해보진 못했다.
왜냐면 바로 터미널에서 디렉토리 설정 및 연결을 하였기 때문이다.
R에 대해서 이제 공부하고 있는 병아리 입장에서는 dyn.load(), paste0()과 system2()를 정확히 이해하여 자유자재로 활용하기에 무리가 있다. 하지만 어느정도 의미를 이해하고 넘어가는 것만으로도 지금 단계에서는 충분할 것 같다.