Usando o pacote rJava no Win7 de 64 bits com R

149

Estou tentando instalar rJavaem um computador com Win 7 de 64 bits. Quando eu corro

install.packages("rJava")

tudo parece estar bem:

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

mas quando tentei carregar a biblioteca library(rJava), recebo o seguinte erro:

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'

Instalei o Java JRE (tentando as versões de 32 e 64 bits) e o JDK (usando as versões de 32 e 64 bits). Minha versão R é R version 2.13.1 (2011-07-08)e estou usando o RStudio.

Se eu tentar usar 32 bits R, posso carregar rJavabem. O problema é que rJavanão é executado no R 64 bits? Como posso saber se um pacote é apenas para 32 em vez de 64?


edit: recém 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
fonte
Você pode colar os resultados de R.Version()sua pergunta? Acabei de instalar a versão de 64 bits do rJavamétodo exato que você descreve em sua pergunta. Meu palpite é que sua versão do R é de 32 bits.
Andrie
pls compartilhe sua ans como você resolveu.
bigData
1
Adicionar um comentário aqui, pois pode ajudar alguém na tarefa de percorrer toda a lista de soluções. Se você receber o erro acima, verifique se seu Java está em Program Filesou Program Files (x86). Adicione um caminho para o Windows, conforme a resposta aceita. Se Program Files (x86)isso significa que você tem uma versão de 32 bits, siga o link sites.google.com/site/rforfishandwildlifegrads/home/week_2/… .
Divi

Respostas:

154

Atualização (julho de 2018):

A versão mais recente do CRJ do rJava encontrará o jvm.dllautomaticamente, sem definir manualmente o PATHou JAVA_HOME. No entanto, observe que:

  • Para usar o rJava no R de 32 bits, você precisa do Java para Windows x86
  • Para usar o rJava no R de 64 bits, você precisa do Java para Windows x64
  • Para criar ou verificar pacotes R com vários arcos (o padrão), é necessário instalar o Java For Windows x64 e o Java for Windows x86 . No Windows 64, o primeiro é instalado C:\Program files\Java\e o segundo, C:\Program Files (x86)\Java\para que não entrem em conflito.

A partir da versão 9 do Java, o suporte para x86 (win32) foi descontinuado. Portanto, a instalação mais recente em vários arcos é instalar o jdk-8u172-windows-i586.exe e o jdk-8u172-windows-x64.exe e, em seguida, o pacote binário do CRAN:

install.packages("rJava")

O pacote binário do CRAN deve capturar a jvm por si só. Somente especialistas : para criar o rJava a partir do código-fonte, você precisa da --merge-multiarchbandeira:

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

Resposta antiga:

(Nota: muitas pessoas em outras respostas / comentários disseram remover o JAVA_HOME, considere isso. Não revisitei esse problema recentemente para saber se todas as etapas abaixo ainda são necessárias.)

Aqui estão alguns conselhos rápidos sobre como começar a usar o R ​​+ rJava no Windows 7 64bit. Existem várias possibilidades, mas a maioria tem falhas fatais. Aqui está o que funcionou para mim:

Adicione jvm.dll ao seu PATH

O rJava, a ponte R <-> Java, precisará do jvm.dll, mas o R terá problemas para encontrar essa DLL. Ele reside em uma pasta como

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

ou

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

Onde quer que você esteja, adicione esse diretório à sua variável PATH do Windows. (Windows -> "Caminho" -> "Editar variáveis ​​de ambiente para sua conta" -> PATH -> edite o valor.)

Você já pode ter o Java no seu PATH. Nesse caso, você deve encontrar o diretório cliente / servidor no mesmo diretório "home" do Java que já está no seu PATH.

Para estar seguro, verifique se suas arquiteturas correspondem. Se você possui Java Program Files, é de 64 bits, portanto, você deve executar o R64. Se você possui Java Program Files (x86), é de 32 bits, então você usa R. simples de 32 bits.

Reinicie o R no menu Windows

Se R estiver em execução, saia.

No menu Iniciar, inicie o R / RGUI, RStudio. Isso é muito importante, para fazer o R ​​pegar suas alterações no PATH.

Instale o rJava 0.9.2.

Versões anteriores não funcionam! Os espelhos não estão atualizados, então acesse a fonte em www.rforge.net: http://www.rforge.net/rJava/files/ . Observe os conselhos lá

“Please use

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

to install.”

Isso está quase correto. Isso realmente funciona:

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

Assista a pontuação! O misterioso “.libPaths () [1]” diz ao R para instalar o pacote no diretório principal da biblioteca. Por algum motivo, deixar o valor em branco não funciona, mesmo que seja o padrão.

misterbee
fonte
4
Em vez de deixar o segundo argumento em branco, você pode simplesmente fazê-lo install.packages('rJava', repos='http://www.rforge.net/').
Ken Williams
2
Como salientado na resposta por @ user2161065, carregamento rJava requer a remoção da variável JAVA_HOME
David LeBauer
1
Apesar de tudo isso pode ser necessário, mesmo depois de fazer isso eu tive que JAVA_HOME unset como sugerido por @ user2161065
ajkl
3
+1 Adicionando ...\jre\bin\servera caminho fixo para mim
mchen
6
Onde podemos encontrar essa variável "PATH do Windows"?
Shreyes 30/03
114

O funcionamento do rJava depende muito da configuração do seu computador:

  1. É necessário usar a mesma versão de 32 bits ou 64 bits para: R e JDK / JRE. Uma mistura disso nunca funcionará (pelo menos para mim).
  2. Se você usa a versão de 64 bits , certifique-se de não definir JAVA_HOME como uma variável de ambiente. Se essa variável for definida, o rJava não funcionará por qualquer motivo (pelo menos para mim). Você pode verificar facilmente dentro de R se JAVA_HOME estiver definido com

    Sys.getenv("JAVA_HOME")

Se você precisar ter JAVA_HOME definido (por exemplo, para o maven ou algo mais), poderá desativá-lo na sua sessão R com o seguinte código antes de carregar o rJava:

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

Isso deve funcionar na maioria dos casos. Além disso, isso corrigirá o problema Usando o pacote rJava no Win7 de 64 bits com o R também. Peguei emprestada a idéia de desarmar a variável de ambiente da instalação do pacote R: rJava com falha .

user2161065
fonte
20
As soluções anteriores não funcionaram até eu me livrar de JAVA_HOME. Isso é fundamental.
bshor
15
Esse problema JAVA_HOME deve ser relatado ao rJava como um bug.
Fila de aprendizes
2
Isso realmente fez o truque para mim: if (Sys.getenv ( "JAVA_HOME") = "!") Sys.setenv (JAVA_HOME = "") biblioteca (rJava) Obrigado @ user2161065
ajkl
adicionar esse script para remover a var JAVA_HOME funcionou para mim!
Richard
1
Essa solução também funciona para pacotes como XLConnect e XLConnectJars que dependem do rJava. (Eu estou escrevendo este comentário óbvio para que os motores de busca podem pegar isso página mais facilmente do que o problema que eu tinha encontrá-lo.)
Tripartio
31

Para mim, definir JAVA_HOME fez o truque (em vez de desmarcar, como em outra resposta dada aqui). No Windows:

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

Ou dentro de R:

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

Mas qual é provavelmente a melhor solução (desde que o rJava 0.9-4) está sobrescrevendo na configuração R do JAVA_HOME do Windows:

options(java.home="C:\\Program Files\\Java\\jre7\\")
library(rJava)
ROLO
fonte
2
+1 na substituição da variável de ambiente JAVA_HOME e configuração em R.
carnust
Meu JAVA_HOME foi definido como uma pasta JDK (como também desenvolvo Java) e o rJava não estava nele. Usei sua última correção (opções), pois não quero mexer com um ambiente de desenvolvimento Java que funcione bem. Obrigado!
precisa
1
options(java.home="my\\path\\to\\jre")trabalhou, quando tudo o resto falha, incluindo o ambiente ambiente PATH
Daniel Krizian
Isso funcionou para mim: options(java.home="C:\\Program Files\\Java\\jdk1.8.0_144\\jre"). Se você possui o jdk1.8.
saubhik
Usando o Adopt Open JDK, essa sugestão final funcionou para mim. Todas as outras soluções populares falharam.
Ola Caster
7

A última pergunta tem uma resposta fácil:

> .Machine$sizeof.pointer
[1] 8

Ou seja, estou executando o R64. Se eu estivesse executando o R de 32 bits, ele retornaria 4. Só porque você está executando um sistema operacional de 64 bits não significa que estará executando o R de 64 bits e, a partir da mensagem de erro, parece que você não está.

EDIT: Se o pacote tiver binários, eles estarão em diretórios separados. Os detalhes dependerão do sistema operacional. Observe que o erro LoadLibrary ocorreu ao tentar encontrar a dll ...rJava/libs/x64/... No sistema Mac OS, a pasta ... rJava / libs / ... `possui 3 subdiretórios: i386, ppc e x86_64. (Os arquivos ppc são obviamente bagagem inútil.)

IRTFM
fonte
Minha instalação do RStudio apontava para 64 bits R. Quando mudei para 32 bits, eu poderia importar o rJavapacote. É por isso que estou tão confuso com a mensagem de erro, pois parece ser exatamente o oposto do que está acontecendo.
DJQ
4

Desculpe pelo necro. Também encontrei o mesmo problema e descobri que rJavaespera JAVA_HOMEapontar para o JRE. Se você possui o JDK instalado, provavelmente você JAVA_HOMEaponta para o JDK. Minha solução rápida:

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

Ocorreu um problema ao determinar o pacote Java que foi instalado quando o problema ocorreu, pois as respostas anteriores não funcionaram exatamente para mim. Para resolver, digitei:

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

e depois pressione tab e os dois diretórios sugeridos foram "jre1.8.0_31 /" e "jre7 /"

O Jre7 não resolveu o meu problema, mas o jre1.8.0_31 / resolveu. A resposta final estava em execução (antes da biblioteca (rJava)):

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

Estou usando o Windows 8.1 de 64 bits. Espero que isso ajude outra pessoa.

Atualizar:

Verifique sua versão para determinar o que X deve ser (o meu mudou várias vezes desde este post):

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

Eu tive um problema relacionado com o rJava. Carregaria, mas um pacote que depende disso, não carregaria.

Os usuários podem perder muito tempo com jvm.dll e PATH e JAVA_HOME quando a solução real é forçar o instalador a esquecer o i386. Use a opção para install.packages. (isso também funciona quando a biblioteca drat é usada. (o crédito vai para Dason)

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

Além disso, você pode modificar apenas o caminho do usuário com um comando win como este:

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

Preciso ter um JRE de 32 bits disponível para o meu navegador, mas o JRE de 64 bits para R e rJava. O JRE de 32 bits está instalado no local padrão. Após algumas experiências, descobri que só precisava de uma das sugestões de misterbee para que o rJava (versão 0.9-6 ) funcionasse para mim. Tudo o que fiz foi adicionar o caminho à minha instalação java de 64 bits:

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

para a parte superior da variável de ambiente do meu caminho (seu caminho provavelmente será diferente) e remova meu JAVA_HOME como sugerido pelo usuário2161065 . Coloquei isso logo à frente da entrada

C:\ProgramData\Oracle\Java\javapath

que o instalador do Oracle insere na parte superior do caminho e aponta para alguns links simbólicos para o JRE de 32 bits. Ao adicionar a entrada no jvm.dll de 64 bits, parece que o rJava pode encontrar o que precisa.

Michael Szczepaniak
fonte
0

Eu acho que isso é uma atualização. Não consegui instalar o rJava (no Windows) até instalar o JDK, pois o Javac não foi encontrado e o javac não está funcionando no prompt de comando do Windows . A mensagem que eu estava recebendo era

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

O JDK inclui o JRE e, de acordo com https://cran.r-project.org/web/packages/rJava/index.html, a versão atual (0.9-7 publicada em 29/07/2015) do rJava

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

Então você está aqui: se o rJava não for instalado porque não consegue encontrar o javac e você tiver o JRE instalado, tente o JDK. Além disso, verifique se JAVA_HOMEaponta para o JDK e não o JRE.

woodvi
fonte
Percebo que isso é basicamente o oposto do que o @friendzis disse.
woodvi
lata desenvolvedor rJava trazer alguma clareza a este problema, pls
userJT
0

Resolvi o problema desinstalando o software Java aparentemente redundante da minha máquina Windows 7 x64. Eu consegui isso, primeiro desinstalar todos os aplicativos Java e , em seguida, instalar uma nova versão Java . (Mais tarde, apontei R 3.4.3 x86_64-w64-mingw32 para o caminho do Java , apenas para mencionar que não acho que esse fosse o problema real.) Hoje, apenas o Java 8 Update 161 (64 bits) 8.0.1610.12 foi deixado. então. Depois disso, install.packages("rJava"); library(rJava)funcionou perfeitamente.

jay.sf
fonte
0

Este é um acompanhamento da Atualização (julho de 2018). Estou no Windows 10 de 64 bits, mas estou configurado para criar pacotes r a partir da fonte para 32 e 64 bits com o Rtools. Meu jdk de 64 bits é o jdk-11.0.2. Quando posso, faço tudo no RStudio. A partir de março de 2019, o rjava é testado com <= jdk11, consulte o github edição # 157 .

  • Instale o jdks no local padrão por Atualização (julho de 2018) da @Jeroen.
  • No R studio, configure JAVA_HOME para o jdk de 64 bits

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

  • Opcionalmente, verifique sua variável ambiental

Sys.getenv("JAVA_HOME")

  • Instale o pacote de acordo com a recomendação da página do github

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

Para sua informação, o console de script do rstudio não gosta de vírgulas duplas ... mas funciona!

Aaron Dickey
fonte
0
  1. Faça o download do Java em https://java.com/en/download/windows-64bit.jsp para janelas de 64 bits \ Instale-o
  2. Faça o download do kit de desenvolvimento Java em https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html para janelas de 64 bits \ instale-o
  3. Em seguida, clique com o botão direito do mouse no ícone “Este PC” na área de trabalho \ Propriedades \ Configurações avançadas do sistema \ Avançado \ Variáveis ​​de ambiente \ Em Variáveis ​​do sistema, selecione Caminho \ Clique em Editar \ Clique em Novo \ Copie e cole os caminhos “C: \ Arquivos de programas \ Java \ jdk1 .8.0_201 \ bin ”e“ C: \ Arquivos de Programas \ Java \ jre1.8.0_201 \ bin ”(sem aspas) \ OK \ OK \ OK

Nota: jdk1.8.0_201 e jre1.8.0_201 serão alterados dependendo da versão do kit de desenvolvimento Java e do Java

  1. Na janela Variáveis ​​de ambiente, vá para Variáveis ​​de usuário para Usuário \ Clique em Novo \ Colocar nome da variável como “JAVA_HOME” e Valor da variável como “C: \ Arquivos de programas \ Java \ jdk1.8.0_201 \ bin” \ Pressione OK

Para verificar a instalação, abra CMD \ Digite javac \ Pressione Enter e digite java \ pressione enter. insira a descrição da imagem aqui

No RStudio, execute

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

Nota: jdk1.8.0_201 será alterado dependendo da versão do Java Development Kit

Agora você pode instalar e carregar o pacote rJava sem nenhum problema.

Bappa Das
fonte