Utilisation du package rJava sur Win7 64 bits avec R

149

J'essaye d'installer rJavasur un ordinateur avec Win 7 64 bits. Quand je cours

install.packages("rJava")

tout semble aller 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

mais quand j'ai essayé de charger la bibliothèque, library(rJava)j'obtiens l'erreur suivante:

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'

J'ai installé le Java JRE (en essayant les versions 32 et 64 bits) et le JDK (en utilisant à la fois 32 et 64 bits). Ma version R est R version 2.13.1 (2011-07-08)et j'utilise RStudio.

Si j'essaie d'utiliser 32 bits R, je peux rJavabien charger . Le problème est-il simplement que rJavane fonctionne pas dans R 64 bits? Comment puis-je savoir si un paquet est juste pour 32 au lieu de 64?


edit: vient de publier 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
la source
Pouvez-vous s'il vous plaît coller les résultats de R.Version()à votre question? Je viens d'installer la version 64 bits en rJavautilisant la méthode exacte que vous décrivez dans votre question. Je suppose que votre version de R est 32 bits.
Andrie
les pls partagent votre et comment vous l'avez résolu.
bigData
1
Ajouter un commentaire ici car cela peut aider quelqu'un à parcourir toute la liste des solutions. Si vous obtenez l'erreur ci-dessus, vérifiez si votre Java est dans Program Filesou Program Files (x86). Ajoutez un chemin aux fenêtres comme le dit la réponse acceptée. Si Program Files (x86)cela signifie que vous disposez d'une version 32 bits, suivez le lien sites.google.com/site/rforfishandwildlifegrads/home/week_2/… .
Divi

Réponses:

154

Mise à jour (juillet 2018):

La dernière version CRAN de rJava trouvera le jvm.dllautomatiquement, sans définir manuellement le PATHou JAVA_HOME. Notez cependant que:

  • Pour utiliser rJava dans R 32 bits, vous avez besoin de Java pour Windows x86
  • Pour utiliser rJava dans R 64 bits, vous avez besoin de Java pour Windows x64
  • Pour créer ou vérifier des packages R avec multi-arch (par défaut), vous devez installer à la fois Java pour Windows x64 et Java pour Windows x86 . Sur Win 64, le premier s'installe C:\Program files\Java\et le second C:\Program Files (x86)\Java\pour ne pas entrer en conflit.

À partir de la version 9 de Java, la prise en charge de x86 (win32) a été interrompue. Par conséquent, la dernière configuration multi-arch de travail consiste à installer à la fois jdk-8u172-windows-i586.exe et jdk-8u172-windows-x64.exe , puis le package binaire de CRAN:

install.packages("rJava")

Le paquet binaire de CRAN devrait récupérer le jvm par lui-même. Experts uniquement : pour construire rJava à partir des sources, vous avez besoin du --merge-multiarchdrapeau:

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

Ancienne réponse:

(Remarque: beaucoup de gens dans d'autres réponses / commentaires ont dit de supprimer JAVA_HOME, alors considérez cela. Je n'ai pas revu ce problème récemment pour savoir si toutes les étapes ci-dessous sont toujours nécessaires.)

Voici quelques conseils rapides sur la façon de démarrer avec R + rJava sur Windows 7 64 bits. Il existe plusieurs possibilités, mais la plupart présentent des défauts fatals. Voici ce qui a fonctionné pour moi:

Ajoutez jvm.dll à votre PATH

rJava, le pont Java R <->, aura besoin de jvm.dll, mais R aura du mal à trouver cette DLL. Il réside dans un dossier comme

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

ou

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

Où que vous soyez, ajoutez ce répertoire à votre variable PATH Windows. (Windows -> "Chemin" -> "Modifier les variables d'environnement pour votre compte" -> CHEMIN -> modifier la valeur.)

Vous avez peut-être déjà Java sur votre PATH. Si c'est le cas, vous devriez trouver le répertoire client / serveur dans le même répertoire "home" Java que celui déjà sur votre PATH.

Pour être sûr, assurez-vous que vos architectures correspondent.Si vous avez Java Program Files, il est 64 bits, vous devez donc exécuter R64. Si vous avez Java Program Files (x86), c'est 32 bits, vous utilisez donc un R. 32 bits ordinaire.

Relancez R à partir du menu Windows

Si R est en cours d'exécution, quittez.

Depuis le menu Démarrer, démarrez R / RGUI, RStudio. Ceci est très important pour que R reprenne vos modifications PATH.

Installez rJava 0.9.2.

Les versions antérieures ne fonctionnent pas! Les miroirs ne sont pas à jour, alors allez à la source sur www.rforge.net: http://www.rforge.net/rJava/files/ . Notez les conseils là-bas

“Please use

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

to install.”

C'est presque correct. Cela fonctionne réellement:

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

Regardez la ponctuation! Le mystérieux «.libPaths () [1]» dit simplement à R d'installer le paquet dans le répertoire principal de la bibliothèque. Pour une raison quelconque, laisser la valeur vide ne fonctionne pas, même si elle doit être définie par défaut.

misterbee
la source
4
Plutôt que de laisser le deuxième argument vide, vous pouvez simplement le faire install.packages('rJava', repos='http://www.rforge.net/').
Ken Williams
2
Comme indiqué dans la réponse de @ user2161065, le chargement de rJava nécessite la suppression de la variable JAVA_HOME
David LeBauer
1
Bien que tout cela puisse être nécessaire, même après avoir fait cela, j'ai dû annuler JAVA_HOME comme suggéré par @ user2161065
ajkl
3
+1 Ajout ...\jre\bin\serverau chemin corrigé pour moi
mchen
6
Où pouvons-nous trouver cette variable "Windows PATH"?
Shreyes
114

Le fonctionnement de rJava dépend fortement de la configuration de votre ordinateur:

  1. Vous devez utiliser la même version 32 bits ou 64 bits pour les deux: R et JDK / JRE. Un mélange de cela ne fonctionnera jamais (du moins pour moi).
  2. Si vous utilisez la version 64 bits , assurez-vous que vous ne définissez pas JAVA_HOME comme variable d'environnement. Si cette variable est définie, rJava ne fonctionnera pas pour une raison quelconque (du moins pour moi). Vous pouvez vérifier facilement dans R si JAVA_HOME est défini avec

    Sys.getenv("JAVA_HOME")

Si vous avez besoin d'avoir JAVA_HOME défini (par exemple, vous en avez besoin pour maven ou autre chose), vous pouvez le désactiver dans votre R-session avec le code suivant avant de charger rJava:

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

Cela devrait faire l'affaire dans la plupart des cas. De plus, cela résoudra le problème d'utilisation du package rJava sur Win7 64 bits avec R, également. J'ai emprunté l'idée de désactiver la variable d' environnement de l'échec de l'installation du package R: rJava .

user2161065
la source
20
Les solutions précédentes n'ont pas fonctionné jusqu'à ce que je me débarrasse de JAVA_HOME. C'est la clé.
bshor
15
Ce problème JAVA_HOME doit être signalé à rJava comme un bogue.
File d'attente des apprentis
2
Cela a vraiment fait l'affaire pour moi: if (Sys.getenv ("JAVA_HOME")! = "") Sys.setenv (JAVA_HOME = "") library (rJava) Merci @ user2161065
ajkl
l'ajout de ce script pour supprimer le var JAVA_HOME a fonctionné pour moi!
Richard
1
Cette solution fonctionne également pour les packages tels que XLConnect et XLConnectJars qui dépendent de rJava. (J'écris ce commentaire évident pour que les moteurs de recherche puissent repérer sur cette page plus facilement que le mal que j'ai eu à la trouver.)
Tripartio
31

Pour moi, définir JAVA_HOME a fait l'affaire (au lieu de le désarmer, comme dans une autre réponse donnée ici). Soit sous Windows:

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

Ou à l'intérieur de R:

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

Mais quelle est probablement la meilleure solution (depuis rJava 0.9-4) est de remplacer complètement dans R le paramètre Windows JAVA_HOME:

options(java.home="C:\\Program Files\\Java\\jre7\\")
library(rJava)
ROLO
la source
2
+1 en écrasant la variable d'environnement JAVA_HOME et en définissant dans R.
carnust
Mon JAVA_HOME était défini sur un dossier JDK (comme je le fais également pour le développement Java), et rJava ne l'avait pas. J'ai utilisé votre dernière correction (options) car je ne veux pas jouer avec un environnement de développement Java qui fonctionne bien. Merci!
chaslewis
1
options(java.home="my\\path\\to\\jre")a fonctionné, quand tout le reste a échoué, y compris la configuration de l'environnement PATH
Daniel Krizian
Cela a fonctionné pour moi: options(java.home="C:\\Program Files\\Java\\jdk1.8.0_144\\jre"). Si vous avez jdk1.8.
saubhik
En utilisant Adopt Open JDK, cette dernière suggestion a fonctionné pour moi. Toutes les autres solutions populaires ont échoué.
Ola Caster
7

La dernière question a une réponse simple:

> .Machine$sizeof.pointer
[1] 8

Cela signifie que j'utilise R64. Si j'exécutais 32 bits R, il renverrait 4. Ce n'est pas parce que vous exécutez un système d'exploitation 64 bits que vous exécuterez 64 bits R, et d'après le message d'erreur, il semble que vous ne l'êtes pas.

EDIT: Si le paquet contient des binaires, ils se trouvent dans des répertoires séparés. Les spécificités dépendront du système d'exploitation. Notez que votre erreur LoadLibrary s'est produite lors de la tentative de recherche de la dll dans ...rJava/libs/x64/... Sur mon système MacOS, le dossier ... rJava / libs / ... `a 3 sous-répertoires: i386, ppc et x86_64. (Les fichiers ppc sont évidemment des bagages inutiles.)

IRTFM
la source
Mon installation RStudio indiquait 64 bits R. Lorsque je l'ai changé en 32 bits, je pouvais importer le rJavapackage. C'est pourquoi je suis si confus au sujet du message d'erreur, car il semble être exactement le contraire de ce qui se passe.
djq du
4

Désolé pour necro. J'ai trop rencontré le même problème et j'ai découvert que cela rJavadevrait JAVA_HOMEpointer vers JRE. Si vous avez installé JDK, vous pointez probablement JAVA_HOMEvers JDK. Ma solution rapide:

Sys.setenv(JAVA_HOME=paste(Sys.getenv("JAVA_HOME"), "jre", sep="\\"))
Friendzis
la source
3

J'ai eu du mal à déterminer le package Java installé lorsque j'ai rencontré ce problème, car les réponses précédentes ne fonctionnaient pas exactement pour moi. Pour faire le tri, j'ai tapé:

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

puis appuyez sur l'onglet et les deux répertoires suggérés étaient "jre1.8.0_31 /" et "jre7 /"

Jre7 n'a pas résolu mon problème, mais jre1.8.0_31 / l'a fait. La réponse finale était en cours d'exécution (avant la bibliothèque (rJava)):

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

J'utilise Windows 8.1 64 bits. J'espère que cela aidera quelqu'un d'autre.

Mettre à jour:

Vérifiez votre version pour déterminer ce que X devrait être (la mienne a changé plusieurs fois depuis ce post):

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

J'ai eu un problème lié avec rJava. Il se chargerait mais un paquet qui en dépend ne se chargerait pas.

Les utilisateurs peuvent perdre beaucoup de temps avec jvm.dll et PATH et JAVA_HOME lorsque le vrai correctif est de forcer le programme d'installation à oublier i386. Utilisez l'option pour install.packages. (cela fonctionne également lorsque la bibliothèque drat est utilisée. (le crédit revient à Dason)

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

En outre, vous pouvez modifier uniquement votre chemin utilisateur avec une commande win comme celle-ci:

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

J'ai besoin d'un JRE 32 bits disponible pour mon navigateur, mais d'un JRE 64 bits pour R et rJava. Le JRE 32 bits est installé à l'emplacement par défaut. Après quelques essais, je trouve que je n'avais besoin l' un des de misterbee suggestions pour obtenir Rjava (version 0,9 à 6 ) travaillant pour moi. Tout ce que j'ai fait a été d'ajouter le chemin d'accès à mon installation java 64 bits:

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

en haut de la variable d'environnement de mon chemin (votre chemin sera probablement différent) et supprimez mon JAVA_HOME comme suggéré par user2161065 . Je mets ça juste avant l'entrée

C:\ProgramData\Oracle\Java\javapath

que le programme d'installation d'Oracle insère en haut du chemin et pointe vers des liens symboliques vers le JRE 32 bits. En ajoutant l'entrée à jvm.dll 64 bits, on dirait que rJava pourrait trouver ce dont il a besoin.

Michael Szczepaniak
la source
0

Je pense que c'est une mise à jour. Je n'ai pas pu installer rJava (sur Windows) avant d'installer le JDK, car Javac n'est pas trouvé et javac ne fonctionne pas dans l'invite de commande Windows . Le message que je recevais était

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

Le JDK inclut le JRE, et selon https://cran.r-project.org/web/packages/rJava/index.html la version actuelle (0.9-7 publiée le 29 juillet 2015) de rJava

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

Alors voilà: si rJava ne s'installe pas parce qu'il ne trouve pas javac et que le JRE est installé, alors essayez le JDK. Assurez-vous également que cela JAVA_HOMEpointe vers le JDK et non vers le JRE.

woodvi
la source
Je remarque que c'est fondamentalement le contraire de ce que @friendzis a dit.
woodvi
Le développeur de rJava peut-il clarifier ce problème, pls
userJT
0

J'ai résolu le problème en désinstallant le logiciel Java apparemment redondant de ma machine Windows 7 x64. J'ai réalisé cela en désinstallant d'abord toutes les applications Java, puis en installant une nouvelle version Java . (Plus tard, j'ai pointé R 3.4.3 x86_64-w64-mingw32 vers le chemin Java , juste pour mentionner que je ne pense pas que ce soit le vrai problème.) Aujourd'hui, il ne restait plus que Java 8 Update 161 (64 bits) 8.0.1610.12 puis. Après cela, install.packages("rJava"); library(rJava)a parfaitement fonctionné.

jay.sf
la source
0

Ceci est un suivi de Update (juillet 2018). Je suis sur Windows 10 64 bits mais je suis configuré pour créer des packages r à partir de la source pour 32 et 64 bits avec Rtools. Mon jdk 64 bits est jdk-11.0.2. Quand je peux, je fais tout dans RStudio. Depuis mars 2019, rjava est testé avec <= jdk11, voir le numéro 157 de github .

  • Installez jdks à leur emplacement par défaut par mise à jour (juillet 2018) par @Jeroen.
  • Dans R studio, définissez JAVA_HOME sur le jdk 64 bits

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

  • Vérifiez éventuellement votre variable environnementale

Sys.getenv("JAVA_HOME")

  • Installez le package selon la recommandation de la page github

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

Pour info, la console de script rstudio n'aime pas les doubles virgules ... mais ça marche!

Aaron Dickey
la source
0
  1. Téléchargez Java depuis https://java.com/en/download/windows-64bit.jsp pour Windows 64 bits \ Installez-le
  2. Téléchargez le kit de développement Java sur https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html pour Windows 64 bits \ installez-le
  3. Puis faites un clic droit sur l'icône «Ce PC» dans le bureau \ Propriétés \ Paramètres système avancés \ Avancé \ Variables d'environnement \ Sous Variables système, sélectionnez Chemin \ Cliquez sur Modifier \ Cliquez sur Nouveau \ Copier et coller les chemins "C: \ Program Files \ Java \ jdk1 .8.0_201 \ bin »et« C: \ Program Files \ Java \ jre1.8.0_201 \ bin »(sans guillemets) \ OK \ OK \ OK

Remarque: jdk1.8.0_201 et jre1.8.0_201 seront modifiés en fonction de la version du kit de développement Java et de Java

  1. Dans la fenêtre Variables d'environnement, allez dans Variables utilisateur pour l'utilisateur \ Cliquez sur Nouveau \ Mettez le nom de la variable comme «JAVA_HOME» et la valeur de la variable comme «C: \ Program Files \ Java \ jdk1.8.0_201 \ bin» \ Appuyez sur OK

Pour vérifier l'installation, ouvrez CMD \ Tapez javac \ Appuyez sur Entrée et tapez java \ Appuyez sur Entrée Il affichera entrez la description de l'image ici

Dans RStudio exécuter

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

Remarque: jdk1.8.0_201 sera modifié en fonction de la version du kit de développement Java

Vous pouvez maintenant installer et charger le package rJava sans aucun problème.

Bappa Das
la source