namespace for failed error r rjava

for - .onLoad falló en loadNamespace() para ''rJava'' al instalar un paquete



error package or namespace load failed for xlsx (5)

Tengo un paquete "javaOnLoadFailed" (solo un paquete mínimo para probar mi problema, de ahí el nombre extraño) que importa rJava. Recibo errores ''rJava'' cuando intento verificar () o instalar () el paquete, aunque requiera que (rJava) funcione bien.

install () da los siguientes errores:

> install() Installing javaOnloadFailed "C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save / --no-restore CMD INSTALL / "C:/Projects/stackoverflow/javaOnloadFailed/javaOnLoadFailed" / --library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source / --install-tests * installing *source* package ''javaOnloadFailed'' ... ** R ** preparing package for lazy loading ** help *** installing help indices ** building package indices ** testing if installed package can be loaded *** arch - i386 Error : .onLoad failed in loadNamespace() for ''rJava'', details: call: inDL(x, as.logical(local), as.logical(now), ...) error: unable to load shared object ''C:/Users/adb2018/Documents/R/win-library/3.2/rJava/libs/i386/rJava.dll'': LoadLibrary failure: %1 is not a valid Win32 application. Error: loading failed Execution halted *** arch - x64 ERROR: loading failed for ''i386'' * removing ''C:/Users/adb2018/Documents/R/win-library/3.2/javaOnloadFailed'' Error: Command failed (1)

Estoy usando R 3.2.0 desde Architect, con sessionInfo ():

R version 3.2.0 (2015-04-16) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1 locale: [1] LC_COLLATE=English_United States.1252 [2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] devtools_1.7.0.9000 rj_2.0.3-2 loaded via a namespace (and not attached): [1] tools_3.2.0 rj.gd_2.0.0-1


He encontrado el mismo problema al intentar instalar un paquete solo disponible en Github.
Esto se solucionó para mí:

devtools::install_github("snowflakedb/dplyr-snowflakedb", INSTALL_opts=c("--no-multiarch"))


He intentado eliminar la variable de sistema JAVA_HOME y funciona. Para que cuando Sys.getenv("JAVA_HOME") R, Sys.getenv("JAVA_HOME") te dé "" .


La variable de entorno de Java está vacía

> Sys.getenv(''JAVA'') [1] ""

Basándome en una suggestion , intenté configurar la variable de entorno JAVA para que apunte a la versión de 64 bits de Java (porque estoy ejecutando R 64 bits, como se puede ver en sessionInfo, pero eso no funciona:

> Sys.setenv(JAVA_HOME=''C://Program Files//Java//jre1.8.0_45'') > install() Installing javaOnloadFailed "C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save / --no-restore CMD INSTALL / "C:/Projects//javaOnloadFailed/javaOnLoadFailed" / --library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source / --install-tests * installing *source* package ''javaOnloadFailed'' ... ** R ** preparing package for lazy loading ** help *** installing help indices ** building package indices ** testing if installed package can be loaded *** arch - i386 Error : .onLoad failed in loadNamespace() for ''rJava'', details: call: inDL(x, as.logical(local), as.logical(now), ...) error: unable to load shared object ''C:/Users/adb2018/Documents/R/win-library/3.2/rJava/libs/i386/rJava.dll'': LoadLibrary failure: %1 is not a valid Win32 application. Error: loading failed Execution halted *** arch - x64 ERROR: loading failed for ''i386'' * removing ''C:/Users/adb2018/Documents/R/win-library/3.2/javaOnloadFailed'' Error: Command failed (1)

Luego traté de establecer la variable de entorno JAVA para que apunte a la versión de 32 bits de Java en mi sistema, ¡y luego funciona!

> Sys.setenv(JAVA_HOME=''C://Program Files (x86)//Java//jre1.8.0_45//') > install() Installing javaOnloadFailed "C:/Program Files/R/R-3.2.0/bin/x64/R" --no-site-file --no-environ --no-save / --no-restore CMD INSTALL / "C:/Projects//javaOnloadFailed/javaOnLoadFailed" / --library="C:/Users/adb2018/Documents/R/win-library/3.2" --with-keep.source / --install-tests * installing *source* package ''javaOnloadFailed'' ... ** R ** preparing package for lazy loading ** help *** installing help indices ** building package indices ** testing if installed package can be loaded *** arch - i386 *** arch - x64 * DONE (javaOnloadFailed) [INFO] Updating the R environment index started... [INFO] The R environment index was updated successfully.

No entiendo muy bien por qué necesito apuntar a Java 32 bit para hacer que R 64 bit funcione, pero ese es el caso.

Por cierto, no tropiece con el nombre de mi paquete "javaOnLoadFailed". Acabo de crear un paquete mínimo con ese nombre para probar el problema.


Muchos paquetes no se instalan porque no están diseñados para ejecutarse en la plataforma i386, pero el proceso de instalación estándar intenta hacerlo. Los usuarios pierden mucho tiempo con jvm.dll y PATH y JAVA_HOME cuando la solución real es forzar a la instalación a olvidarse de i386. Utilice la opción para instalar.paquetes. (Esto también funciona cuando se usa la librería drat. (el crédito va a Dason)

install.packages("SqlRender",INSTALL_opts="--no-multiarch")


Recuerde que el problema es que R no sabe dónde está jvm.dll. Cuando establezca JAVA_HOME use la ruta del directorio que contiene el archivo dll. Lo puedes encontrar en bin/client o bin/server . El comando entonces se convierte en:

Sys.setenv(JAVA_HOME=''C://Program Files//Java//jre1.8.0_45//bin//client'')