【问题标题】:Rstudio Knit button fail to load rJavaRstudio Knit 按钮无法加载 rJava
【发布时间】:2017-07-12 15:57:32
【问题描述】:

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

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

test.Rmd 的内容:

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

```{r}
library(rJava)
```

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

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

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。

更新:根据@r2evans 的要求添加Sys.getenv() 的输出。 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

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

Update2 关注来自@r2evans 的 cmets

.Rmd 中包含来自render() 的DYLD_FALLBACK_LIBRARY_PATH 会按预期更改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)
```

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

## DYLD_LIBRARY_PATH     /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/server
## LD_LIBRARY_PATH       :@JAVA_LD@

我不知道它是否有意义,但我尝试了一个新的.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)
```

【问题讨论】:

  • 我无法重现您的错误...在我的系统 Ubuntu 16.04 LTS 上一切正常。其余的包和我系统上的一样。
  • renderknitting 中运行Sys.getenv() 可能会提供信息。寻找差异,特别是在 PATH 和任何与 LIB 相关的变量中。
  • @r2evans 更新了问题并提供了所要求的信息。
  • 你找到libjvm.dylib的位置了吗?我可能会开始查看额外的DYLD_FALLBACK_LIBRARY_PATH 路径(来自第二个清单)。如果您在那里找到它,请尝试使用附加路径更新变量(不幸的是,可能在 .Rmd 文件中)。
  • 感谢@r2evans 的帮助。在来自 Knit 按钮 (/Library/Frameworks/R.framework/Resources/lib) 的 DYLD_FALLBACK_LIBRARY_PATH 中没有 libjvm.dylib 文件,但在来自 render() (/usr/local/lib) 的路径之一中。我应该将此文件(它是别名)复制到/Library/Frameworks/R.framework/Resources/lib 吗?或者在.Rmd 文件中写一些东西?这些软件包是否会出现此问题,或者只是我机器中的错误配置?我尝试在加载rJava之前添加Sys.setenv(DYLD_FALLBACK_LIBRARY_PATH="/usr/local/lib"),但是编织时的错误仍然存​​在

标签: r rstudio knitr r-markdown rjava


【解决方案1】:

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

sudo R CMD javareconf

【讨论】:

    【解决方案2】:

    我遇到了和你一样的问题。在 Rstudio R 控制台中加载 rJava 没有问题,但在编写 HTML 文件时遇到加载失败。像你一样,我也能够使用 render() 命令在“编织”上加载 rJava。我几乎没有进行您所做的广泛级别的测试,但是我最终可以通过 neilfws 在评论中提供给您的链接在“编织”期间成功加载 rJava -

    http://stackoverflow.com/questions/30738974/rjava-load-error-in-rstudio-r-after-upgrading-to-osx-yosemite

    然后我按照元(https://stackoverflow.com/users/5697305/yuan)的建议,使用命令直接在R中加载库:

    dyn.load('/Library/Java/JavaVirtualMachines/jdk1.8.0[YOURVERSIONHERE].jdk/Contents/Home/jre/lib/server/libjvm.dylib')
    

    在 RMarkdown 文件中插入这一行不会影响正常的控制台行为,但允许使用“编织”按钮进行编织。从来不知道为什么,但解决方案有效。

    【讨论】:

      【解决方案3】:

      您知道您使用的是哪种 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。

      【讨论】:

      • 我正在使用 Java 版本 8 更新 121(来自java.com/en/download/installed8.jsp 中的测试)。不久前,我遇到了一些与 RJava 相关的问题,并记住了这个遗留的 Java 6 作为建议的解决方案,但我按照stackoverflow.com/questions/30738974/… 的一些答案解决了这些问题。我认为这不是 Java 问题,因为这些函数在编织范围之外可以正常工作。
      • 关于它在不使用 RStudio 编织按钮的情况下工作的好处。
      猜你喜欢
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2020-06-30
      相关资源
      最近更新 更多