2017-02-22 55 views
9

Rstudio的編織按鈕無法編織包含rJava軟件包的rmark(Rmd)文件。但是,如果我使用rmarkdown::render(),則相同的Rmd文件會呈現爲html而不會出現問題。Rstudio編織按鈕無法加載rJava

我可以重現錯誤與下面的代碼:

內容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 version 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替換了一些私人信息。

在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

評論,包括從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) 
``` 

有趣的是,在此test2.Rmd略高於使用render(),並且包括Sys.getenv()現在輸出兩個新的變量,之前不​​存在,不存在使用針織按鈕:

​​

我沒有,如果它是有道理的,但我嘗試了一個新的.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= ":@[email protected]") 
library(rJava) 
``` 
+0

我無法重現你的錯誤......我的工作系統,Ubuntu的LTS 16.04對所有的罰款。其餘的軟件包與我的系統相同。 –

+0

在'render'和''knit''中運行'Sys.getenv()'可能會有所幫助。尋找差異,特別是在「PATH」和任何「LIB」相關變量中。 – r2evans

+0

@ r2evans更新了所需信息的問題。 –

回答

0

你知道你在使用哪個Java嗎?我不知道足夠的關於Java知道如果我的經驗可能會有所幫助,但是,當我試圖重現你的錯誤,我指着這個網站:

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

,我下載並安裝了遺留Java 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。這樣做是否能解決你的錯誤?

我正在使用Sierra 10.12.3,RStudio 1.0.136,rJava_0.9-8 MacBook Pro。

+0

我正在使用Java版本8更新121(來自https:/ /www.java.com/en/download/installed8.jsp)。前一段時間,我遇到了一些與RJava相關的問題,並將這個傳統的Java 6作爲提議的解決方案記住,但是我在解決了這些問題後,從http://stackoverflow.com/questions/30738974/rjava-load-error-in-rstudio -R-後升級到OSX,優勝美地。我不認爲這是一個Java問題,因爲這些功能在編織範圍之外很好地工作。 –

+0

關於它在RStudio針織按鈕外使用的好處。 –

1

我和你有同樣的問題。在Rstudio R控制檯中加載rJava時沒有問題,但在編織HTML文件時無法加載。和你一樣,我也可以使用render()命令將rJava加載到「編織」上。我沒有這樣做幾乎你沒有測試廣泛的水平,但是我最終能成功時加載rJava一個「編織」通過遵循commments由neilfws提供給您的鏈接 -

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

運行在命令行下解決這個問題對我來說:

sudo R CMD javareconf