Rstudio Knit按钮无法加载rJava

R N*_*oob 12 r rjava rstudio knitr r-markdown

Rstudio的编织按钮无法编写包含rJava包的rmarkdown(Rmd)文件.但是,如果我使用rmarkdown::render(),相同的Rmd文件将呈现为html而不会出现问题.

我可以使用以下代码重现错误:

test.Rmd的内容:

---
title: "test"
output: html_document
---

```{r}
library(rJava)
```
Run Code Online (Sandbox Code Playgroud)

单击编织按钮按钮将返回:

processing file: test.Rmd

Error : .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.3/Resources/library/rJava/libs/rJava.so':
  dlopen(/Library/Frameworks/R.framework/Versions/3.3/Resources/library/rJava/libs/rJava.so, 6): Library not loaded: @rpath/libjvm.dylib
  Referenced from: /Library/Frameworks/R.framework/Versions/3.3/Resources/library/rJava/libs/rJava.so
  Reason: image not found
Quitting from lines 7-8 (test.Rmd) 
Error: package or namespace load failed for 'rJava'
Execution halted
Run Code Online (Sandbox Code Playgroud)

并且rmarkdown::render("test.Rmd")工作正常.此外,library(rJava)正常运行(非编织)也可以正常工作(在RStudio内).

在macOS Sierra 10.12中使用RStudio版本1.0.136,knitr 1.15.1,rmarkdown 1.3,rJava 0.9-8,R 3.3.2.

更新:添加Sys.getenv()@ r2evans请求的输出.DYLD_FALLBACK_LIBRARY_PATH的值有所不同,但我不知道这是否有意义.我用XXX替换了一些私人信息.

在Knit按钮产生的html文件中:

## __CF_USER_TEXT_ENCODING
##                       0x1F5:0x0:0x52
## Apple_PubSub_Socket_Render
##                       /private/tmp/com.apple.launchd.HvKScioyGU/Render
## DISPLAY               :0
## DYLD_FALLBACK_LIBRARY_PATH
##                       /Library/Frameworks/R.framework/Resources/lib
## EDITOR                vi
## GIT_ASKPASS           rpostback-askpass
## HOME                  XXX
## LANG                  en_CA.UTF-8
## LC_CTYPE              en_CA.UTF-8
## LN_S                  ln -s
## LOGNAME               XXX
## MAKE                  make
## NOT_CRAN              true
## PAGER                 /usr/bin/less
## PATH                  /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/TeX/texbin
## PWD                   XXX
## R_ARCH                
## R_BROWSER             /usr/bin/open
## R_BZIPCMD             /usr/bin/bzip2
## R_DOC_DIR             /Library/Frameworks/R.framework/Resources/doc
## R_GZIPCMD             /usr/bin/gzip
## R_HOME                /Library/Frameworks/R.framework/Resources
## R_INCLUDE_DIR         /Library/Frameworks/R.framework/Resources/include
## R_LIBS                /Library/Frameworks/R.framework/Versions/3.3/Resources/library
## R_LIBS_SITE           
## R_LIBS_USER           ~/Library/R/3.3/library
## R_PAPERSIZE           a4
## R_PAPERSIZE_USER      a4
## R_PDFVIEWER           /usr/bin/open
## R_PLATFORM            x86_64-apple-darwin13.4.0
## R_PRINTCMD            lpr
## R_QPDF                /Library/Frameworks/R.framework/Resources/bin/qpdf
## R_RD4PDF              times,inconsolata,hyper
## R_SESSION_TMPDIR      /var/folders/15/vdvn4fvx0zn0gc93_5krp6h00000gn/T//RtmpiYlwpU
## R_SHARE_DIR           /Library/Frameworks/R.framework/Resources/share
## R_SYSTEM_ABI          osx,gcc,gxx,gfortran,?
## R_TEXI2DVICMD         /usr/local/bin/texi2dvi
## R_UNZIPCMD            /usr/bin/unzip
## R_ZIPCMD              /usr/bin/zip
## RMARKDOWN_MATHJAX_PATH
##                       /Applications/RStudio.app/Contents/Resources/resources/mathjax-26
## RMARKDOWN_PREVIEW_DIR
##                       /var/folders/15/vdvn4fvx0zn0gc93_5krp6h00000gn/T//RtmpLe3D9z
## RS_RPOSTBACK_PATH     /Applications/RStudio.app/Contents/MacOS/rpostback
## RS_SHARED_SECRET      XXX
## RSTUDIO               1
## RSTUDIO_PANDOC        /Applications/RStudio.app/Contents/MacOS/pandoc
## RSTUDIO_SESSION_PORT
##                       XXX
## RSTUDIO_USER_IDENTITY
##                       XXX
## RSTUDIO_WINUTILS      bin/winutils
## SED                   /usr/bin/sed
## SHELL                 /bin/bash
## SHLVL                 0
## SSH_AUTH_SOCK         XXX
## TAR                   /usr/bin/tar
## TMPDIR                /var/folders/15/vdvn4fvx0zn0gc93_5krp6h00000gn/T/
## USER                  XXX
## XPC_FLAGS             0x0
## XPC_SERVICE_NAME      0
Run Code Online (Sandbox Code Playgroud)

在以下文件中产生rmarkdown::render():

## __CF_USER_TEXT_ENCODING
##                       0x1F5:0x0:0x52
## Apple_PubSub_Socket_Render
##                       /private/tmp/com.apple.launchd.HvKScioyGU/Render
## DISPLAY               :0
## DYLD_FALLBACK_LIBRARY_PATH
##                       /Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Users/Jayme/lib:/usr/local/lib:/usr/lib::::::::
## EDITOR                vi
## GIT_ASKPASS           rpostback-askpass
## HOME                  XXX
## LANG                  en_CA.UTF-8
## LC_CTYPE              en_CA.UTF-8
## LN_S                  ln -s
## LOGNAME               XXX
## MAKE                  make
## PAGER                 /usr/bin/less
## PATH                  /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/TeX/texbin
## R_BROWSER             /usr/bin/open
## R_BZIPCMD             /usr/bin/bzip2
## R_DOC_DIR             /Library/Frameworks/R.framework/Resources/doc
## R_GZIPCMD             /usr/bin/gzip
## R_HOME                /Library/Frameworks/R.framework/Resources
## R_INCLUDE_DIR         /Library/Frameworks/R.framework/Resources/include
## R_LIBS_SITE           
## R_LIBS_USER           ~/Library/R/3.3/library
## R_PAPERSIZE           a4
## R_PDFVIEWER           /usr/bin/open
## R_PLATFORM            x86_64-apple-darwin13.4.0
## R_PRINTCMD            lpr
## R_QPDF                /Library/Frameworks/R.framework/Resources/bin/qpdf
## R_RD4PDF              times,inconsolata,hyper
## R_SESSION_TMPDIR      /var/folders/15/vdvn4fvx0zn0gc93_5krp6h00000gn/T//RtmpLe3D9z
## R_SHARE_DIR           /Library/Frameworks/R.framework/Resources/share
## R_SYSTEM_ABI          osx,gcc,gxx,gfortran,?
## R_TEXI2DVICMD         /usr/local/bin/texi2dvi
## R_UNZIPCMD            /usr/bin/unzip
## R_ZIPCMD              /usr/bin/zip
## RMARKDOWN_MATHJAX_PATH
##                       /Applications/RStudio.app/Contents/Resources/resources/mathjax-26
## RS_RPOSTBACK_PATH     /Applications/RStudio.app/Contents/MacOS/rpostback
## RS_SHARED_SECRET      XXX
## RSTUDIO               1
## RSTUDIO_PANDOC        /Applications/RStudio.app/Contents/MacOS/pandoc
## RSTUDIO_SESSION_PORT
##                       XXX
## RSTUDIO_USER_IDENTITY
##                       XXX
## RSTUDIO_WINUTILS      bin/winutils
## SED                   /usr/bin/sed
## SHELL                 /bin/bash
## SSH_AUTH_SOCK         XXX
## TAR                   /usr/bin/tar
## TMPDIR                /var/folders/15/vdvn4fvx0zn0gc93_5krp6h00000gn/T/
## USER                  XXX
## XPC_FLAGS             0x0
## XPC_SERVICE_NAME      0
Run Code Online (Sandbox Code Playgroud)

Update2来自@ r2evans的评论

包括DYLD_FALLBACK_LIBRARY_PATH render()中的.Rmd更改结果Sys.getenv()如预期,但带有编织按钮的错误行为(与上面相同的错误消息)并且没有错误render()持续存在.新.Rmd内容是:

---
title: "test2"
output: html_document
---

```{r}
Sys.setenv(DYLD_FALLBACK_LIBRARY_PATH="/Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Users/Jayme/lib:/usr/local/lib:/usr/lib::::::::")
library(rJava)
```
Run Code Online (Sandbox Code Playgroud)

有趣的是,render()test2.Rmd上面使用,包括Sys.getenv()现在输出两个新变量,使用编织按钮之前不存在和不存在:

## DYLD_LIBRARY_PATH     /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/server
## LD_LIBRARY_PATH       :@JAVA_LD@
Run Code Online (Sandbox Code Playgroud)

如果它有意义,我不会,但我尝试了一个新的.Rmd(下面),仍然给出了相同的错误

---
title: "test3"
output: html_document
---

```{r}
Sys.setenv(DYLD_FALLBACK_LIBRARY_PATH="/Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Library/Frameworks/R.framework/Resources/lib:/Users/Jayme/lib:/usr/local/lib:/usr/lib::::::::")
Sys.setenv(DYLD_LIBRARY_PATH="/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/server")
Sys.setenv(LD_LIBRARY_PATH= ":@JAVA_LD@")
library(rJava)
```
Run Code Online (Sandbox Code Playgroud)

Meg*_*ron 8

在命令行上运行以下命令为我解决了这个问题:

sudo R CMD javareconf
Run Code Online (Sandbox Code Playgroud)


Fre*_*ehm 0

你知道你使用的是哪种Java吗?我对 Java 的了解不够,不知道我的经验是否有帮助,但是,当我尝试重现您的错误时,有人指向我这个网站:

https://support.apple.com/kb/DL1572?locale=en_US

我在其中下载并安装了 OS X 10.11 El Capitan、OS X 10.10 Yosemite、OS X 10.9 Mavericks、OS X 10.8 Mountain Lion 和 OS X 10.7 Lion 的旧版 Java 6 运行时。这样做可以解决您的错误吗?

我正在使用配备 Sierra 10.12.3、RStudio 1.0.136、rJava_0.9-8 的 MacBook Pro。