Usando el paquete rJava en Win7 64 bit con R

149

Estoy tratando de instalar rJavaen una computadora con Win 7 de 64 bits. Cuando corro

install.packages("rJava")

Todo parece estar bien:

Installing package(s) into ‘C:/Users/djq/Documents/R/win-library/2.13
(as ‘lib’ is unspecified)
trying URL 'http://software.rc.fas.harvard.edu/mirrors/R/bin/windows/contrib/2.13/rJava_0.9-1.zip'
Content type 'application/zip' length 654936 bytes (639 Kb)
opened URL
downloaded 639 Kb

package 'rJava' successfully unpacked and MD5 sums checked

The downloaded packages are in
    C:\TEMP\RtmpW2eAUw\downloaded_packages

pero cuando intenté cargar la biblioteca library(rJava)recibí el siguiente error:

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/me/Documents/R/win-library/2.13/rJava/libs/x64/rJava.dll':
  LoadLibrary failure:  %1 is not a valid Win32 application.

Error: package/namespace load failed for 'rJava'

He instalado Java JRE (probando las versiones de 32 y 64 bits) y el JDK (usando ambos de 32 y 64 bits). Mi versión R es R version 2.13.1 (2011-07-08)y estoy usando RStudio.

Si intento usar R de 32 bits, puedo cargar rJavabien. ¿Es el problema solo que rJavano se ejecuta en R 64 bit? ¿Cómo puedo saber si un paquete es solo para 32 en lugar de 64?


editar: recién publicado R.version():

> R.Version()
$platform
[1] "x86_64-pc-mingw32"

$arch
[1] "x86_64"

$os
[1] "mingw32"

$system
[1] "x86_64, mingw32"

$status
[1] ""

$major
[1] "2"

$minor
[1] "13.1"

$year
[1] "2011"

$month
[1] "07"

$day
[1] "08"

$`svn rev`
[1] "56322"

$language
[1] "R"

$version.string
[1] "R version 2.13.1 (2011-07-08)"
djq
fuente
¿Pueden pegar los resultados de R.Version()su pregunta? Acabo de instalar la versión de 64 bits de rJavausar el método exacto que describe en su pregunta. Supongo que su versión de R es de 32 bits.
Andrie
por favor comparta sus ans y cómo lo resolvió.
bigData
1
Agregar un comentario aquí ya que puede ayudar a alguien la tarea de revisar toda la lista de soluciones. Si obtiene el error anterior, verifique si su Java está en Program Fileso Program Files (x86). Agregue la ruta a Windows como dice la respuesta aceptada. Si Program Files (x86)significa que tiene una versión de 32 bits, siga el enlace sites.google.com/site/rforfishandwildlifegrads/home/week_2/… .
Divi

Respuestas:

154

Actualización (julio de 2018):

La última versión CRAN de rJava encontrará jvm.dllautomáticamente, sin configurar manualmente el PATHo JAVA_HOME. Sin embargo, tenga en cuenta que:

  • Para usar rJava en R de 32 bits, necesita Java para Windows x86
  • Para usar rJava en R de 64 bits, necesita Java para Windows x64
  • Para compilar o verificar paquetes R con múltiples arcos (el valor predeterminado) debe instalar tanto Java para Windows x64 como Java para Windows x86 . En Win 64, el primero se instala C:\Program files\Java\y el segundo se instala C:\Program Files (x86)\Java\para que no entren en conflicto.

A partir de Java versión 9, el soporte para x86 (win32) ha sido descontinuado. Por lo tanto, la última configuración de trabajo de varios arcos es instalar jdk-8u172-windows-i586.exe y jdk-8u172-windows-x64.exe y luego el paquete binario de CRAN:

install.packages("rJava")

El paquete binario de CRAN debería recuperarse en el jvm por sí mismo. Solo expertos : para construir rJava desde la fuente, necesita la --merge-multiarchbandera:

install.packages('rJava', type = 'source', INSTALL_opts='--merge-multiarch')

Respuesta anterior:

(Nota: muchas personas en otras respuestas / comentarios han dicho que eliminen JAVA_HOME, así que considere eso. No he revisado este problema recientemente para saber si todos los pasos a continuación siguen siendo necesarios).

Aquí hay algunos consejos rápidos sobre cómo comenzar a usar R + rJava en Windows 7 de 64 bits. Hay varias posibilidades, pero la mayoría tiene fallas fatales. Esto es lo que funcionó para mí:

Agregue jvm.dll a su RUTA

rJava, el puente R <-> Java, necesitará jvm.dll, pero R tendrá problemas para encontrar esa DLL. Reside en una carpeta como

C:\Program Files\Java\jdk1.6.0_25\jre\bin\server

o

C:\Program Files\Java\jre6\jre\bin\client

Donde sea que esté el suyo, agregue ese directorio a su variable PATH de Windows. (Windows -> "Ruta" -> "Editar variables de entorno para su cuenta" -> RUTA -> edite el valor).

Es posible que ya tenga Java en su RUTA. Si es así, debe encontrar el directorio cliente / servidor en el mismo directorio de "inicio" de Java que el que ya está en su RUTA.

Para estar seguro, asegúrese de que sus arquitecturas coincidan. Si tiene Java Program Files, es de 64 bits, por lo que debe ejecutar R64. Si tiene Java Program Files (x86), eso es de 32 bits, por lo que usa R. de 32 bits.

Vuelva a iniciar R desde el menú de Windows

Si R se está ejecutando, salga.

Desde el menú Inicio, Iniciar R / RGUI, RStudio. Esto es muy importante, para que R recoja sus cambios de RUTA.

Instale rJava 0.9.2.

¡Las versiones anteriores no funcionan! Los espejos no están actualizados, así que vaya a la fuente en www.rforge.net: http://www.rforge.net/rJava/files/ . Tenga en cuenta el consejo allí

“Please use

`install.packages('rJava',,'http://www.rforge.net/')`

to install.”

Eso es casi correcto. Esto realmente funciona:

install.packages('rJava', .libPaths()[1], 'http://www.rforge.net/')

Mira la puntuación! El misterioso ".libPaths () [1]", simplemente le dice a R que instale el paquete en el directorio de la biblioteca primaria. Por alguna razón, dejar el valor en blanco no funciona, aunque debería ser predeterminado.

misterbee
fuente
44
En lugar de dejar el segundo argumento en blanco, puede hacerlo install.packages('rJava', repos='http://www.rforge.net/').
Ken Williams el
2
Como se señaló en la respuesta de @ user2161065, cargar rJava requiere eliminar la variable JAVA_HOME
David LeBauer,
1
Aunque todo esto podría ser necesario, incluso después de hacer esto tuve que desarmar JAVA_HOME como lo sugirió @ user2161065
ajkl
3
+1 Agregar ...\jre\bin\servera la ruta lo arregló para mí
mchen
66
¿Dónde podemos encontrar esta variable "RUTA de Windows"?
Shreyes
114

Hacer que rJava funcione depende en gran medida de la configuración de su computadora:

  1. Debe usar la misma versión de 32 bits o 64 bits para ambos: R y JDK / JRE. Una mezcla de esto nunca funcionará (al menos para mí).
  2. Si utiliza la versión de 64 bits , asegúrese de no establecer JAVA_HOME como una variable de entorno. Si se establece esta variable, rJava no funcionará por el motivo que sea (al menos para mí). Puede verificar fácilmente dentro de R si JAVA_HOME está configurado con

    Sys.getenv("JAVA_HOME")

Si necesita tener configurado JAVA_HOME (por ejemplo, si lo necesita para Maven u otra cosa), puede desactivarlo dentro de su sesión R con el siguiente código antes de cargar rJava:

if (Sys.getenv("JAVA_HOME")!="")
  Sys.setenv(JAVA_HOME="")
library(rJava)

Esto debería hacer el truco en la mayoría de los casos. Además, esto solucionará el problema al usar el paquete rJava en Win7 de 64 bits con R también. Tomé prestada la idea de desarmar la variable de entorno del error de instalación del paquete R: rJava .

usuario2161065
fuente
20
Las soluciones anteriores no funcionaron hasta que me deshice de JAVA_HOME. Esta es la clave.
bshor
15
Este problema JAVA_HOME se debe informar a rJava como un error.
Aprendiz Queue
2
Esto realmente me sirvió: if (Sys.getenv ("JAVA_HOME")! = "") Sys.setenv (JAVA_HOME = "") biblioteca (rJava) Gracias @ user2161065
ajkl
¡agregar ese script para eliminar la var JAVA_HOME funcionó para mí!
Richard
1
Esta solución también funciona para paquetes como XLConnect y XLConnectJars que dependen de rJava. (Estoy escribiendo este comentario obvio para que los motores de búsqueda puedan ver esta página más fácilmente que el problema que tuve al encontrarla).
Tripartio
31

Para mí, configurar JAVA_HOME hizo el truco (en lugar de desarmar, como en otra respuesta dada aquí). Ya sea en Windows:

set JAVA_HOME="C:\Program Files\Java\jre7\"

O dentro de R:

Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jre7\\")

Pero, ¿cuál es probablemente la mejor solución (ya que rJava 0.9-4) está anulando por completo la configuración JAVA_HOME de Windows:

options(java.home="C:\\Program Files\\Java\\jre7\\")
library(rJava)
ROLO
fuente
2
+1 al anular la variable env JAVA_HOME y establecer en R.
carnust
Mi JAVA_HOME estaba configurado en una carpeta JDK (como también desarrollo Java), y rJava no lo tenía. Utilicé su última solución (opciones) ya que no quiero meterme con un entorno de desarrollo Java que funcione bien. ¡Gracias!
chaslewis
1
options(java.home="my\\path\\to\\jre")funcionó, cuando todo lo demás falló, incluida la configuración del entorno RUTA
Daniel Krizian
Esto funcionó para mí: options(java.home="C:\\Program Files\\Java\\jdk1.8.0_144\\jre"). Si tienes jdk1.8.
saubhik
Usando Adopt Open JDK, esa sugerencia final funcionó para mí. Todas las otras soluciones populares fallaron.
Ola Caster
7

La última pregunta tiene una respuesta fácil:

> .Machine$sizeof.pointer
[1] 8

Lo que significa que estoy ejecutando R64. Si estuviera ejecutando R de 32 bits, devolvería 4. El hecho de que esté ejecutando un sistema operativo de 64 bits no significa que ejecutará R de 64 bits, y según el mensaje de error parece que no lo está.

EDITAR: Si el paquete tiene binarios, entonces están en directorios separados. Los detalles dependerán del sistema operativo. Observe que su error de LoadLibrary ocurrió cuando intentó encontrar el dll en ...rJava/libs/x64/... mi sistema MacOS, la carpeta ... rJava / libs / ... `tiene 3 subdirectorios: i386, ppc y x86_64. (Los archivos ppc son obviamente equipaje inútil).

IRTFM
fuente
Mi instalación de RStudio apuntó a 64 bits R. Cuando lo cambié a 32 bits, pude importar el rJavapaquete. Es por eso que estoy tan confundido sobre el mensaje de error, ya que parece ser exactamente lo contrario de lo que está sucediendo.
djq
4

Perdón por necro. También me he encontrado con el mismo problema y descubrí que rJavaespera JAVA_HOMEapuntar a JRE. Si tiene instalado JDK, lo más probable es que JAVA_HOMEapunte a JDK. Mi solución rápida:

Sys.setenv(JAVA_HOME=paste(Sys.getenv("JAVA_HOME"), "jre", sep="\\"))
friendzis
fuente
3

Tuve algunos problemas para determinar el paquete Java que se instaló cuando me encontré con este problema, ya que las respuestas anteriores no me funcionaron exactamente. Para solucionarlo, escribí:

Sys.setenv(JAVA_HOME="C:/Program Files/Java/

y luego presione la pestaña y los dos directorios sugeridos fueron "jre1.8.0_31 /" y "jre7 /"

Jre7 no resolvió mi problema, pero jre1.8.0_31 / lo hizo. La respuesta final se estaba ejecutando (antes de la biblioteca (rJava)):

Sys.setenv(JAVA_HOME="C:/Program Files/Java/jre1.8.0_31/")

Estoy usando Windows 8.1 de 64 bits. Espero que esto ayude a alguien más.

Actualizar:

Verifique su versión para determinar cuál debería ser X (la mía ha cambiado varias veces desde esta publicación):

Sys.setenv(JAVA_HOME="C:/Program Files/Java/jre1.8.0_x/")
Optimus
fuente
3

Tuve un problema relacionado con rJava. Se cargaría, pero un paquete que depende de él no se cargaría.

Los usuarios pueden perder mucho tiempo con jvm.dll y PATH y JAVA_HOME cuando la solución real es forzar al instalador a olvidarse de i386. Use la opción para install.packages. (esto también funciona cuando se usa la biblioteca drat. (el crédito va a Dason)

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

Además, puede modificar solo su ruta de usuario con un comando win como este:

setx PATH "C:\Program Files\Java\jre1.8.0_102\bin\server;%PATH%"
userJT
fuente
0

Necesito tener un JRE de 32 bits disponible para mi navegador, pero JRE de 64 bits para R y rJava. El JRE de 32 bits se instala en la ubicación predeterminada. Después de experimentar un poco, descubrí que solo necesitaba una de las sugerencias de misterbee para que rJava (versión 0.9-6 ) funcionara para mí. Todo lo que hice fue agregar la ruta a mi instalación de Java de 64 bits:

C:\apps\Java\jre\bin\server\jvm.dll

a la parte superior de mi variable de entorno de ruta (su ruta probablemente será diferente) y elimine mi JAVA_HOME como sugirió user2161065 . Puse esto justo antes de la entrada

C:\ProgramData\Oracle\Java\javapath

que el instalador de Oracle inserta en la parte superior de la ruta y señala algunos enlaces simbólicos al JRE de 32 bits. Al agregar la entrada a jvm.dll de 64 bits, parece que rJava podría encontrar lo que necesita.

Michael Szczepaniak
fuente
0

Creo que esta es una actualización. No pude instalar rJava (en Windows) hasta que instalé el JDK, ya que Javac no se encuentra y javac no funciona en el símbolo del sistema de Windows . El mensaje que estaba recibiendo era

'javac' is not recognized as an internal or external command, operable program or batch file.

El JDK incluye el JRE y, de acuerdo con https://cran.r-project.org/web/packages/rJava/index.html, la versión actual (0.9-7 publicada el 29 de julio de 2015) de rJava

SystemRequirements:     Java JDK 1.2 or higher (for JRI/REngine JDK 1.4 or higher), GNU make

Así que ahí estás: si rJava no se instalará porque no puede encontrar javac y tienes el JRE instalado, entonces prueba el JDK. Además, asegúrese de que JAVA_HOMEapunta al JDK y no al JRE.

Woodvi
fuente
Noté que esto es básicamente opuesto a lo que dijo @friendzis.
woodvi
¿Puede el desarrollador de Java aportar algo de claridad a este problema, por favor
userJT
0

Resolví el problema desinstalando software Java aparentemente redundante de mi máquina Windows 7 x64. Lo logré desinstalando primero todas las aplicaciones Java y luego instalando una versión Java nueva . (Más tarde señalé R 3.4.3 x86_64-w64-mingw32 a la ruta de Java , solo por mencionar que no creo que este fuera el verdadero problema). Hoy solo queda Java 8 Update 161 (64 bits) 8.0.1610.12 luego. Después de esto, install.packages("rJava"); library(rJava)funcionó perfectamente.

jay.sf
fuente
0

Este es un seguimiento de la Actualización (julio de 2018). Estoy en Windows 10 de 64 bits, pero estoy configurado para construir paquetes r desde la fuente para 32 y 64 bits con Rtools. Mi jdk de 64 bits es jdk-11.0.2. Cuando puedo, hago todo en RStudio. A partir de marzo de 2019, rjava se ha probado con <= jdk11, consulte el número 157 de github .

  • Instale jdks en su ubicación predeterminada por actualización (julio de 2018) por @Jeroen.
  • En R studio, establezca JAVA_HOME en el jdk de 64 bits

Sys.setenv(JAVA_HOME="C:/Program Files/Java/jdk-11.0.2")

  • Opcionalmente verifique su variable ambiental

Sys.getenv("JAVA_HOME")

  • Instale el paquete según la recomendación de la página de Github

install.packages("rJava",,"http://rforge.net")

FYI, a la consola de scripts de rstudio no le gustan las comas dobles ... ¡pero funciona!

Aaron Dickey
fuente
0
  1. Descargue Java desde https://java.com/en/download/windows-64bit.jsp para Windows de 64 bits \ Instalarlo
  2. Descargue el kit de desarrollo Java de https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html para Windows de 64 bits \ instálelo
  3. Luego haga clic con el botón derecho en el icono "Esta PC" en el escritorio \ Propiedades \ Configuración avanzada del sistema \ Avanzado \ Variables de entorno \ En Variables del sistema, seleccione Ruta \ Haga clic en Editar \ Haga clic en Nuevo \ Copiar y pegue rutas "C: \ Archivos de programa \ Java \ jdk1 .8.0_201 \ bin "y" C: \ Archivos de programa \ Java \ jre1.8.0_201 \ bin "(sin comillas) \ OK \ OK \ OK

Nota: jdk1.8.0_201 y jre1.8.0_201 se cambiarán según la versión del kit de desarrollo de Java y Java

  1. En la ventana Variables de entorno, vaya a Variables de usuario para Usuario \ Haga clic en Nuevo \ Poner nombre de variable como “JAVA_HOME” y el valor de Variable como “C: \ Archivos de programa \ Java \ jdk1.8.0_201 \ bin” \ Presione OK

Para verificar la instalación, abra CMD \ Type javac \ Presione Enter y escriba java \ presione enter Se mostrará ingrese la descripción de la imagen aquí

En RStudio ejecutar

Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jdk1.8.0_201")

Nota: jdk1.8.0_201 se cambiará según la versión del kit de desarrollo de Java

Ahora puede instalar y cargar el paquete rJava sin ningún problema.

Bappa Das
fuente