我最近将R更新为3.4并将RStudio更新为其RStudio v1.0.143 Preview,以便它与图像更新兼容R的图,但是现在我在尝试加载它或需要它的包时遇到了rJava的问题。它如下:
Loading required package: rJava
Error: package or namespace load failed for ‘rJava’:
.onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so': dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
Referenced from:
/Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/libs/rJava.so
Reason: image not found
Error: package ‘rJava’ could not be loaded
我目前正在运行MacOSX 10.12.4 Sierra
如何解决这个问题的任何帮助都非常感谢。
答案 0 :(得分:2)
正如@mko已经指出的那样,macOS / R / rJava的混合是混乱的,虽然是非常有用的。我已经在每个版本的几个版本中争论这个问题,无论你多么小心,它似乎会定期再次咬人。也就是说,要记住各种各样的事情:
libjvm.dylib
的位置。javareconf
脚本在升级到新的Java版本后无法正确重新配置 R;它需要重新安装R才能正确完成。所以,请记住这些:
JAVA_HOME
是个好主意javareconf
脚本,让它为现代JDK配置。对javareconf的自定义调用只是终端的几行: 首先,确保根据需要设置JAVA_HOME:
# Make sure JAVA_HOME is set as required.
export JAVA_HOME=${JAVA_HOME:-$(/usr/libexec/java_home)}
# Obtain location of Java runtime library.
export LIBJVM=$(find "${JAVA_HOME}" -name 'libjvm.dylib')
# Reconfigure R using custom call to javareconf script.
R CMD javareconf JAVA_LIBS="${LIBJVM}" JAVA_LD_LIBRARY_PATH="${LIBJVM}" JAVA_CPPFLAGS="'-I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin -I$(dirname "${LIBJVM}")'"
# Link Java runtime to R library folder so it can be found.
ln -fs "$LIBJVM" /Library/Frameworks/R.framework/Libraries
现在你应该能够启动R并安装rJava ok。
如果您正在使用R的Homebrew安装(需要使用--with-java
选项安装),请使用此行来链接Java运行时:
ln -fs "$LIBJVM" "$(brew --prefix r)/lib"
该过程需要macOS的管理员权限(除非通过Homebrew安装R)。 R软件包安装程序为各种文件提供管理员权限,因此不需要sudo
,幸运的是。作为参考,我最近还就此问题写了一篇简短的article。
答案 1 :(得分:0)
你可以做的是尝试从源头重建rJava。
确保重新配置Java。由于事实上javareconf在macOS和JAVA上做了很多强有力的假设(其中一个是,只要你有#34; Home"字,在JAVA_HOME变量中,它会假设你想要使用系统范围Java - 不太好主意),你需要:
创造"人工" JDK中的家,例如
cd /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents
ln -s Home RHome
将RHome导出为JAVA_HOME
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/RHome
运行带有许多开关的javareconf,这些开关将使用基于JNI的代码编译生成gcc
`sudo R CMD javareconf JAVA_HOME=${JAVA_HOME} JAVA=${JAVA_HOME/bin/java JAVAC=${JAVA_HOME}/bin/javac JAVAH=${JAVA_HOME}/bin/javah JAR=${JAVA_HOME}/bin/jar JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/jre/lib/server JAVA_CPPFLAGS="-I${JAVA_HOME}/include -I${JAVA_HOME}/include/darwin"`
下载rJava包并尝试手动重建(R外)
https://cran.r-project.org/web/packages/rJava/index.html
> curl https://cran.r-project.org/src/contrib/rJava_0.9-8.tar.gz -o rJava_0.9-8.tar.gz
> tar zxf rJava_0.9-8.tar.gz
> cd rJava
> ./configure
如果通过,则启动R(在您设置env的同一控制台中)
> install.packages("rJava", type="source")
请注意,对于凌乱的Java安装(Apple的JRE,Oracle的JDK),您可能需要首先正确设置Java env。可能你需要一些"脏"在JRE中从JDK链接 javac , javah 和 jar 的黑客攻击。一旦./configure
抱怨缺少命令,您就会知道何时需要这样做。
也可能需要更新文件
`/usr/libexec/java_home`/../Info.plist
并确保您的JVM可以处理JNI。你需要改变:
<key>JVMCapabilities</key>
<array>
<string>CommandLine</string>
</array>
到
<key>JVMCapabilities</key>
<array>
<string>CommandLine</string>
<string>JNI</string>
</array>
经过一番努力,你可能会让它运转良好。但是,它确实依赖于系统。很大程度上取决于您拥有的R版本,是否安装了JDK以及您的默认JVM是什么。
注意!
rJava需要XQuartz进行编译,请确保安装它