Korzystanie z pakietu rJava w 64-bitowym systemie Windows 7 z oprogramowaniem R.

149

Próbuję zainstalować rJavana komputerze z systemem Windows 7 64-bitowym. Kiedy biegnę

install.packages("rJava")

wszystko wydaje się być w porządku:

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

ale kiedy próbuję załadować bibliotekę, pojawia library(rJava)się następujący błąd:

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'

Zainstalowałem środowisko Java JRE (próbuję zarówno wersji 32-bitowej, jak i 64-bitowej) oraz JDK (używając zarówno wersji 32-bitowej, jak i 64-bitowej). Moja wersja R to R version 2.13.1 (2011-07-08)i używam RStudio.

Jeśli spróbuję użyć 32-bitowego R, ładuję rJavadobrze. Czy problem po prostu rJavanie działa w R 64-bitowym? Jak mogę sprawdzić, czy pakiet jest tylko dla 32 zamiast 64?


edycja: właśnie opublikowano 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
źródło
Czy możesz wkleić wyniki R.Version()zapytania do swojego pytania? Właśnie zainstalowałem wersję 64-bitową rJavaprzy użyciu metody, którą opisałeś w swoim pytaniu. Domyślam się, że twoja wersja R jest 32-bitowa.
Andrie,
pls podziel się swoimi odpowiedziami, jak to rozwiązałeś.
bigData
1
Dodanie tutaj komentarza, ponieważ może pomóc komuś w przejrzeniu całej listy rozwiązań. Jeśli pojawi się powyższy błąd, sprawdź, czy Twoja Java jest w Program Fileslub Program Files (x86). Dodaj ścieżkę do okien zgodnie z zaakceptowaną odpowiedzią. Jeśli Program Files (x86)to oznacza, że ​​masz wersję 32-bitową, kliknij łącze sites.google.com/site/rforfishandwildlifegrads/home/week_2/… .
Divi

Odpowiedzi:

154

Aktualizacja (lipiec 2018):

Najnowsza wersja CRAN rJava znajdzie jvm.dllautomatycznie, bez ręcznego ustawiania PATHlub JAVA_HOME. Należy jednak pamiętać, że:

  • Aby używać rJava w 32-bitowym R, potrzebujesz Java dla Windows x86
  • Aby używać rJava w 64-bitowym R, potrzebujesz Java dla Windows x64
  • Aby zbudować lub sprawdzić pakiety R z multi-arch (domyślnie), musisz zainstalować zarówno Javę dla Windows x64, jak i Java dla Windows x86 . W systemie Win 64 pierwszy instaluje się, C:\Program files\Java\a drugi w, C:\Program Files (x86)\Java\więc nie powodują konfliktów.

Począwszy od wersji Java 9 wsparcie dla x86 (win32) zostało przerwane. Dlatego najnowsza działająca konfiguracja multi-arch polega na zainstalowaniu zarówno jdk-8u172-windows-i586.exe, jak i jdk-8u172-windows-x64.exe, a następnie pakietu binarnego z CRAN:

install.packages("rJava")

Pakiet binarny z CRAN powinien sam znaleźć się w jvm. Tylko eksperci : aby zbudować rJava ze źródła, potrzebujesz --merge-multiarchflagi:

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

Stara odpowiedź:

(Uwaga: wielu ludzi w innych odpowiedziach / komentarzach mówiło o usunięciu JAVA_HOME, więc rozważ to. Nie wracałem ostatnio do tego problemu, aby wiedzieć, czy wszystkie poniższe kroki są nadal konieczne.)

Oto kilka szybkich porad, jak rozpocząć pracę z R + rJava w systemie Windows 7 64bit. Możliwości jest kilka, ale większość z nich ma fatalne wady. Oto, co zadziałało dla mnie:

Dodaj jvm.dll do swojej ścieżki PATH

rJava, most R <-> Java, będzie potrzebował biblioteki jvm.dll, ale R będzie miał problem ze znalezieniem tej biblioteki DLL. Znajduje się w folderze, takim jak

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

lub

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

Gdziekolwiek jest twój, dodaj ten katalog do zmiennej PATH systemu Windows. (Windows -> „Ścieżka” -> „Edytuj zmienne środowiskowe dla swojego konta” -> ŚCIEŻKA -> edytuj wartość).

Być może masz już Javę na swojej ścieżce PATH. Jeśli tak, powinieneś znaleźć katalog klient / serwer w tym samym katalogu "macierzystym" Javy, co ten, który już znajduje się w PATH.

Aby być bezpiecznym, upewnij się, że architektura się zgadza. Jeśli masz Javę Program Files, jest ona 64-bitowa, więc powinieneś uruchomić R64. Jeśli masz Javę Program Files (x86), jest to 32-bitowe, więc używasz zwykłego 32-bitowego R.

Uruchom ponownie R z menu Windows

Jeśli R jest uruchomiony, zakończ.

Z menu Start wybierz Start R / RGUI, RStudio. Jest to bardzo ważne, aby R odebrał zmiany PATH.

Zainstaluj rJava 0.9.2.

Wcześniejsze wersje nie działają! Lustra nie są aktualne, więc przejdź do źródła pod adresem www.rforge.net: http://www.rforge.net/rJava/files/ . Zwróć uwagę na zawarte tam porady

“Please use

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

to install.”

To jest prawie poprawne. To faktycznie działa:

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

Uważaj na interpunkcję! Tajemniczy „.libPaths () [1]” po prostu mówi R, aby zainstalował pakiet w głównym katalogu biblioteki. Z jakiegoś powodu pozostawienie wartości pustej nie działa, nawet jeśli powinno być domyślne.

misterbee
źródło
4
Zamiast pozostawiać drugi argument pusty, możesz to zrobić install.packages('rJava', repos='http://www.rforge.net/').
Ken Williams
2
Jak wskazał w odpowiedzi @ user2161065, ładowanie rJava wymaga usunięcia zmiennej JAVA_HOME
David LeBauer
1
Chociaż wszystko to może być potrzebne, nawet po zrobieniu tego musiałem wyłączyć JAVA_HOME zgodnie z sugestią @ user2161065
ajkl
3
+1 Dodanie ...\jre\bin\serverdo ścieżki naprawiło to dla mnie
mchen
6
Gdzie możemy znaleźć tę zmienną „Windows PATH”?
Shreyes
114

Uruchomienie rJavy zależy w dużej mierze od konfiguracji twojego komputera:

  1. Musisz użyć tej samej wersji 32-bitowej lub 64-bitowej dla obu: R i JDK / JRE. Taka mieszanka nigdy nie zadziała (przynajmniej dla mnie).
  2. Jeśli używasz wersji 64-bitowej, upewnij się, że nie ustawiłeś JAVA_HOME jako zmiennej środowiskowej. Jeśli ta zmienna jest ustawiona, rJava nie będzie działać z jakiegokolwiek powodu (przynajmniej dla mnie). Możesz łatwo sprawdzić w R, czy JAVA_HOME jest ustawiony za pomocą

    Sys.getenv("JAVA_HOME")

Jeśli potrzebujesz ustawić JAVA_HOME (np. Potrzebujesz go dla mavena lub czegoś innego), możesz go dezaktywować w sesji R za pomocą następującego kodu przed załadowaniem rJavy:

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

W większości przypadków powinno to załatwić sprawę. Ponadto rozwiąże to problem z użyciem pakietu rJava w systemie Windows 7 w wersji 64-bitowej z R. Zapożyczyłem pomysł usunięcia zmiennej środowiskowej z niepowodzenia instalacji pakietu R: rJava .

user2161065
źródło
20
Poprzednie rozwiązania nie działały, dopóki nie pozbyłem się JAVA_HOME. To jest kluczowe.
bshor
15
Ten problem z JAVA_HOME powinien zostać zgłoszony rJava jako błąd.
Kolejka praktykantów
2
To naprawdę zadziałało: jeśli (Sys.getenv ("JAVA_HOME")! = "") Sys.setenv (JAVA_HOME = "") biblioteka (rJava) Dzięki @ user2161065
ajkl
dodanie tego skryptu w celu usunięcia zmiennej JAVA_HOME zadziałało!
Richard
1
To rozwiązanie działa również w przypadku pakietów takich jak XLConnect i XLConnectJars, które są zależne od rJava. (Piszę ten oczywisty komentarz, aby wyszukiwarki mogły łatwiej wychwycić tę stronę niż kłopoty ze znalezieniem jej.)
Tripartio
31

Dla mnie ustawienie JAVA_HOME załatwiło sprawę (zamiast rozbrajania, jak w innej odpowiedzi podanej tutaj). Albo w systemie Windows:

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

Lub wewnątrz R:

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

Ale prawdopodobnie najlepszym rozwiązaniem (od rJava 0.9-4) jest nadpisanie w R ustawienia Windows JAVA_HOME w ogóle:

options(java.home="C:\\Program Files\\Java\\jre7\\")
library(rJava)
ROLO
źródło
2
+1 za nadpisanie zmiennej env JAVA_HOME i ustawienie w R.
Carnust
Mój JAVA_HOME został ustawiony na folder JDK (tak jak robię to w Javie), a rJava go nie miał. Użyłem twojej ostatniej poprawki (opcji), ponieważ nie chcę mieszać w dobrze działającym środowisku programistycznym Java. Dzięki!
chaslewis
1
options(java.home="my\\path\\to\\jre")zadziałało, gdy wszystko inne zawiodło, w tym ustawienie środowiska PATH
Daniel Krizian
Ten pracował dla mnie options(java.home="C:\\Program Files\\Java\\jdk1.8.0_144\\jre"). Jeśli masz jdk1.8.
saubhik
Używając Adopt Open JDK, ta ostatnia sugestia zadziałała. Wszystkie inne popularne rozwiązania zawiodły.
Ola Caster
7

Ostatnie pytanie ma prostą odpowiedź:

> .Machine$sizeof.pointer
[1] 8

Oznacza to, że używam R64. Gdybym korzystał z 32-bitowego R, zwróciłoby to 4. Tylko dlatego, że używasz 64-bitowego systemu operacyjnego, nie oznacza, że ​​będziesz używać 64-bitowego R, az komunikatu o błędzie wynika, że ​​tak nie jest.

EDYCJA: Jeśli pakiet ma pliki binarne, to znajdują się w oddzielnych katalogach. Szczegóły będą zależeć od systemu operacyjnego. Zwróć uwagę, że błąd LoadLibrary wystąpił podczas próby znalezienia biblioteki DLL w ...rJava/libs/x64/... folderze ... rJava / libs / ... `na moim systemie MacOS, zawierającym 3 podkatalogi: i386, ppc i x86_64. (Pliki ppc są oczywiście bezużytecznym bagażem).

IRTFM
źródło
Moja instalacja RStudio wskazywała na 64-bitowy R. Kiedy zmieniłem go na 32-bitowy, mogłem zaimportować rJavapakiet. Dlatego jestem tak zdezorientowany komunikatem o błędzie, ponieważ wydaje się być dokładnym przeciwieństwem tego, co się dzieje.
djq
4

Przepraszam za nekro. Ja też napotkałem ten sam problem i dowiedziałem się, rJavaże JAVA_HOMEpowinien wskazywać na JRE. Jeśli masz zainstalowany JDK, najprawdopodobniej twoje JAVA_HOMEpunkty wskazują na JDK. Moje szybkie rozwiązanie:

Sys.setenv(JAVA_HOME=paste(Sys.getenv("JAVA_HOME"), "jre", sep="\\"))
friendzis
źródło
3

Miałem problemy z określeniem pakietu Java, który został zainstalowany, gdy napotkałem ten problem, ponieważ poprzednie odpowiedzi nie działały dla mnie. Aby to uporządkować, wpisałem:

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

a następnie naciśnij tab, a dwa sugerowane katalogi to „jre1.8.0_31 /” i „jre7 /”

Jre7 nie rozwiązało mojego problemu, ale jre1.8.0_31 / tak. Końcowa odpowiedź była uruchomiona (przed biblioteką (rJava)):

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

Używam 64-bitowego systemu Windows 8.1 Mam nadzieję, że to pomoże komuś innemu.

Aktualizacja:

Sprawdź swoją wersję, aby określić, jaki powinien być X (moja zmieniała się kilka razy od tego postu):

Sys.setenv(JAVA_HOME="C:/Program Files/Java/jre1.8.0_x/")
Optimus
źródło
3

Miałem podobny problem z rJava. Załadowałby się, ale pakiet, który od niego zależy, nie zostałby załadowany.

Użytkownicy mogą tracić dużo czasu z jvm.dll, PATH i JAVA_HOME, gdy prawdziwym rozwiązaniem jest zmuszenie instalatora do zapomnienia o i386. Użyj opcji dla install.packages. (działa to również, gdy używana jest biblioteka drat. (autorstwo dla Dason)

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

Możesz również zmodyfikować tylko swoją ścieżkę użytkownika za pomocą polecenia win w następujący sposób:

setx PATH "C:\Program Files\Java\jre1.8.0_102\bin\server;%PATH%"
userJT
źródło
0

Muszę mieć 32-bitowe środowisko JRE dostępne dla mojej przeglądarki, ale 64-bitowe środowisko JRE dla R i rJava. 32-bitowe środowisko JRE jest instalowane w domyślnej lokalizacji. Po kilku eksperymentach stwierdziłem, że potrzebuję tylko jednej z sugestii misterbee, aby rJava (wersja 0.9-6 ) działała dla mnie. Wszystko, co zrobiłem, to dodanie ścieżki do mojej 64-bitowej instalacji Java:

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

na szczycie mojej zmiennej środowiskowej ścieżka (ścieżka będzie prawdopodobnie inny) i usunąć moje JAVA_HOME jak user2161065 sugerowane. Umieściłem to tuż przed wejściem

C:\ProgramData\Oracle\Java\javapath

który instalator Oracle wstawia na początku ścieżki i wskazuje na niektóre dowiązania symboliczne do 32-bitowego środowiska JRE. Dodając wpis do 64-bitowej biblioteki jvm.dll, wygląda na to, że rJava może znaleźć to, czego potrzebuje.

Michał Szczepaniak
źródło
0

Myślę, że to aktualizacja. Nie mogłem zainstalować rJavy (w systemie Windows), dopóki nie zainstalowałem JDK, ponieważ Javac nie został znaleziony, a javac nie działa w wierszu poleceń systemu Windows . Otrzymałem wiadomość

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

JDK zawiera JRE, a według https://cran.r-project.org/web/packages/rJava/index.html aktualna wersja (0.9-7 opublikowana 2015-Jul-29) rJava

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

Więc oto jesteś: jeśli rJava nie zainstaluje się, ponieważ nie może znaleźć javaca, a masz zainstalowane JRE, wypróbuj JDK. Upewnij się również, że JAVA_HOMEwskazuje to JDK, a nie JRE.

woodvi
źródło
Zauważyłem, że jest to w zasadzie przeciwieństwo tego, co powiedział @friendzis.
woodvi
Czy programista rJava może wyjaśnić ten problem, pls
userJT
0

Rozwiązałem problem, odinstalowując pozornie nadmiarowe oprogramowanie Java z mojego komputera z systemem Windows 7 x64. Osiągnąłem to, najpierw odinstalowując wszystkie aplikacje Java, a następnie instalując nową wersję Java . (Później wskazałem R 3.4.3 x86_64-w64-mingw32 na ścieżkę Java , żeby wspomnieć, chociaż nie sądzę, aby to był prawdziwy problem.) Dzisiaj pozostała tylko Java 8 Update 161 (64-bit) 8.0.1610.12 następnie. Po tym install.packages("rJava"); library(rJava)działał idealnie.

jay.sf
źródło
0

To jest kontynuacja aktualizacji (lipiec 2018). Używam 64-bitowego systemu Windows 10, ale jestem skonfigurowany do budowania pakietów r ze źródła zarówno dla 32, jak i 64 bitów z Rtools. Mój 64-bitowy jdk to jdk-11.0.2. Kiedy mogę, robię wszystko w RStudio. Od marca 2019 rjava jest testowana z <= jdk11, zobacz numer 157 na githubie .

  • Zainstaluj jdks w ich domyślnej lokalizacji za aktualizacją (lipiec 2018) autorstwa @Jeroen.
  • W R studio ustaw JAVA_HOME na 64-bitowy jdk

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

  • Opcjonalnie sprawdź zmienną środowiskową

Sys.getenv("JAVA_HOME")

  • Zainstaluj pakiet zgodnie z zaleceniem strony github

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

FYI, konsola skryptowa rstudio nie lubi podwójnych przecinków ... ale działa!

Aaron Dickey
źródło
0
  1. Pobierz Javę ze strony https://java.com/en/download/windows-64bit.jsp dla 64-bitowego systemu Windows \ Zainstaluj ją
  2. Pobierz zestaw programistyczny Java ze strony https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html dla 64-bitowego systemu Windows \ zainstaluj go
  3. Następnie kliknij prawym przyciskiem myszy ikonę „Ten komputer” na pulpicie \ Właściwości \ Zaawansowane ustawienia systemu \ Zaawansowane \ Zmienne środowiskowe \ W obszarze Zmienne systemowe wybierz Ścieżka \ Kliknij Edytuj \ Kliknij Nowy \ Kopiuj i wklej ścieżki „C: \ Program Files \ Java \ jdk1 .8.0_201 \ bin ”i„ C: \ Program Files \ Java \ jre1.8.0_201 \ bin ”(bez cudzysłowu) \ OK \ OK \ OK

Uwaga: jdk1.8.0_201 i jre1.8.0_201 zostaną zmienione w zależności od wersji Java Development Kit i Java

  1. W oknie Zmienne środowiskowe przejdź do Zmienne użytkownika dla użytkownika \ Kliknij Nowa \ Umieść nazwę zmiennej jako „JAVA_HOME” i wartość zmiennej jako „C: \ Program Files \ Java \ jdk1.8.0_201 \ bin” \ Naciśnij OK

Aby sprawdzić instalację, otwórz CMD \ Type javac \ Naciśnij Enter i wpisz java \ naciśnij enter. Pojawi się wprowadź opis obrazu tutaj

W RStudio uruchom

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

Uwaga: jdk1.8.0_201 zostanie zmieniony w zależności od wersji Java Development Kit

Teraz możesz bez problemu zainstalować i załadować pakiet rJava.

Bappa Das
źródło