Anda di halaman 1dari 6

Integrando as linguagens Java e R

Bruno Henrique de Oliveira Peixoto

1 - Introduo
R o nome de uma linguagem de programao voltada para clculo, estatistica e grficos. Sendo assim, muito usada pelo comunidade acadmica nos cursos na rea de exatas. Esta linguagem possui muitas facilidades para se trabalhar com nmeros, vetores e tabelas. Alm disso, open-source. Ao contrrio dos limitados pacotes Java para clculos que existem por a. Para se ter uma ideia do poder dessa linguagem, possvel at plotar grficos em 3D. Sendo assim uma alternativa para o JfreeChart ou para qualquer outro pacote de plotagem de grficos em Java. A comunidade R bastante ativa, e os usurios contribuem com um grande nmero de pacotes que oferecem as mais variadas funcionalidades. Deste modo, uma integrao entre R e Java pode dar ao desenvolvedor um arsenal de causar inveja a qualquer linguagem. Atualmente esta linguagem vem ganhando fora graas ao interesse de empresas e pesquisadores em Minerao de Dados. Logo, nada mais conveniente que uma linguagem feita para trabalhar com clculos para se fazer uma Minerao de Dados. Vale ressaltar tambm que essa linguagem pode ser considerada uma alternativa gratuita e de to facil manuseio quaato o MatLab. Nos prximos tpicos esse artigo ir mostrar duas solues para integrar uma aplicao Java ao console do R (interpretador de comandos R).

2 - Alternativas para integrao Java e R


Basicamente existem duas alternativas para comunicao entre Java e R. So elas jCaller e rJava(jri). A primeira, jCaller, bem mais simples, de fcil instalao e configurao, porm ainda existem poucos mtodos implementados nesse pacote. Mas acredito que os mtodos existentes sejam suficientes para se fazer tudo que sua criatividade precisar, porm com algumas linhas de cdigo a mais. A segunda, rJava(jri), a mais conhecida, mais usada e a nica que consta no site que da organizao de mantm o R. No entando o rJava(jri) tem uma dificuldade de configurao e instalao que pode ser considerada de mdia a elevada. Outro fato relevante na diferena entre as duas que o rJava (jri) faz chamada a bibliotecas nativas via JNI, enquanto o rCaller consegue se comunicar diretamente com o interpretador R.

3 - Instalando o R
Esse artigo s abordar a instalao no ambiente linux usando o eclipse IDE. Para instalar o R basta ir no gerenciador de pacotes e baixar os pacotes r-base e r-base-core. Para quem prefere o console:

>sudo apt-get install r-base r-base-core

Listagem 1 instalando o R pelo console do linux.

Para testar a instalao, s abrir o console do linux e digitar R.

>R

Listagem 2 executando o R pelo console do linux.

Apo este comando voc estar no ambiente de programao do R e algo como isto dever ser exibido.

>R version 2.11.1 (2010-05-31) Copyright (C) 2010 The R Foundation for Statistical Computing ISBN 3-900051-07-0

R um software livre e vem sem GARANTIA ALGUMA. Voc pode redistribu-lo sob certas circunstncias. Digite 'license()' ou 'licence()' para detalhes de distribuio.

R um projeto colaborativo com muitos contribuidores. Digite 'contributors()' para obter mais informaes e 'citation()' para saber como citar o R ou pacotes do R em publicaes.

Digite 'demo()' para demonstraes, 'help()' para o sistema on-line de ajuda, ou 'help.start()' para abrir o sistema de ajuda em HTML no seu navegador. Digite 'q()' para sair do R.

Listagem 3 executando o R pelo console do linux Depois destes passos s escolher uma das opes de integrao a seguir.

4 Instalando o rCaller
um conjunto de Classes java usadas para receber e executar comandos em R, e uma alternativa ao rJava(mais complexo pois utiliza JNI para comunicao entre as linguagens). Para fazer o download do rCaller acesse http://www.mhsatman.com/rcaller.php e baixe o RCALLER.JAR ou o projeto para o NetBeans IDE com os arquivos-fontes. Aps isso s adicionar esse jar no build Path do seu projeto pelo eclipse. Para acessar essa opo s apertar

com o boto direito do mouse sobre o projeto e selecionar a opo Build Path Configure Build Path. Abrir uma janela. Na Aba libraries selecione Add External Jars, e selecione o arquivo RCALLER.JAR que foi baixado Aps estes passos sua aplicao Java j est pronta para executar um programa que tenha comandos R. Segue um pequeno exemplo de gerao de grfico com o R. A sada deste programa um arquivo jpeg com a imagem do grfico:
public class Main { public static void main(String[] args) { RCaller caller = new RCaller(); StringBuffer code = new StringBuffer(); String a1 = "a <- c(2,4,6,8);";//armazena expressao R String b1 = "b <- c(4,16,36,64);"; code.append(a1); // acumula espressoes R na variavel code code.append(b1); //Troque o caminho abaixo por um existente em sua maquina code.append("jpeg(\"/home/SUAPASTA/exemplo.jpg\");"); //expressao R para plotar graficos code.append("plot(a,b);"); //expressao R para definir as linhas do graficos code.append("lines(a,b,lwd=2,col=\"red\");"); code.append("cat(makejava(a));"); try { //executa expressao R caller.RunRCode(code.toString(), true, true); } catch (Exception e) { System.out.println(e); } } }

Listagem 4 exemplo programa Java com cdigo em R.

Os cdigos R dentro da Classe Java devem ser armazenados em uma String, e opcionalmente acumulados em um StringBuffer ou StringBuider. Devem ser executados atravs de:
Rcaller caller = new Rcaller(); //parametros booleanos servem para visualizar os eventos R no console java caller.RunRCode(code.toString(), true, true);

Listagem 5 Explicao dos objetos do pacote rCaller

Mais informaes em : http://www.mhsatman.com/rcaller.php.

Observaes: Caso haja o interesse de chamar um programa R em um arquivo externo, os cdigos em R no podero ter comentrios e acentos. Alm disso, a cada trmino de linha de cdigo em R, essa dever ser terminada com um ponto e vrgula(;). O mesmo se aplica quando se fecha um bloco de cdigos com chaves(};)

5 - Instalando o rJava
O rJava um pacote para se integrar R com Java. Mas dentro deste pacote vem um outro pacote para se fazer a integrao no caminho inverso que de Java para R. Esse pacote chamado de JRI O rJava pode ser baixado pelo gerenciador de pacotes, pelo prprio ambiente do R ou no site fo rJava http://rosuda.org/rJava/.
>R >install.packages('rJava')

Listagem 6 baixando o rJava pelo console do linux no ambiente do R.


>sudo apt-get install r-cran-rjava

Listagem 7 baixando o R pelo console do linux.

Aps essa instalao, as configuraes seguintes sero feitas dentro do Eclipse. 0 Crie um novo projeto no eclipse ou edite algum existente. Logo aps, clique com o boto direito sobre o projeto e selecione a opo Import. Na janela que abrir selecione a opo File System. Insira o caminho do rJava (/usr/lib/R/site-library/rJava/jri/examples). Adicione as classes rtest.java e rtest2.java. Aps este passo essas classes devero estar dentro da sua aplicao. 1 - Em sua aplicao (configurao feita dentro do Eclipse) adicionar o jar JRI.jar contido dentro das pastas do rJava ( normalmente contido na pasta /usr/lib/R/site-library/rJava/jri) dentro da pasta lib de sua aplicao, ou simplesmente importar para o build path. 2 - Aps isso ir no run configuration da aplicao e configurar as variaveis de ambiente (aba enviroment). Aperte em new e insira os seguintes valores: Name: R_HOME Value: /usr/lib/R (esse tem q ser o caminho onde est instalado o seu R) Name: LD_LIBRARY_PATH Value: /usr/lib/R/lib:/usr/lib/R/bin:

3 - Adicionar o seguinte argumento no run configuration da aplicao (Caminho: Run As Run Configurations Aba Arguments Vm Arguments):

-Djava.library.path="/usr/lib/R/site-library/rJava/jri"

Listagem 8 Adicionando argumentos no Eclipse

O caminho acima deve ser onde se encontra o arquivo libjri.so. Opcionalmente pode ser copiado para a pasta da da sua aplicao junto ao jri.jar. *obs.: Se houver comandos inseridos no Vm Arguments no esquecer de dar um espao antes de colocar o comando anterior. 4- ( S necessrio em aplicaes desktop ) Deve-se adicionar o caminho do arquivo libjri.so no JRI.jar . Para acessar essa opo s apertar com o boto direito do mouse e selecionar a opo Build Path Configure Build Path. Abrir uma janela. Na Aba libraries encontre o JRI.jar. Aperte na seta que se encontra antes do nome JRI.jar. Abrir uma estrutura de rvore com quatro opes(Source Attachment, Javadoc Location, Native Library Location, Access Rules). Selecionar o Native Library Location e editar. Insira o caminho (/usr/lib/R/site-library/rJava/jri) do arquivo libjri.so. 5 Adicionar, como argumento dentro do programa um dos seguintes comandos: --save, --no-save ou vanilla para que o programa possa executar. (Caminho: Run As Run Configurations Aba Arguments Program Arguments): 6- No caso de aplicaes web com Java (testado com Spring Framework), o objeto Rengine deve ser instanciado somente uma vez. Adicionar a seguinte linha de cdigo para garantir somente uma instncia e que seja excutado somente depois das injees de dependncias;
@PostConstruct private void init() { this.rengine = new Rengine(args, false, new TextConsole()); }

Listagem 9 cdigo de inicializao do objeto rengine em aplicaes Java com o Framework Spring..

*em args, adicionar um dos seguintes argumentos (--save, --no-save, --vanilla). 7- Executar a Classe rtest.java que vem na pasta Examples do JRI (/usr/lib/R/sitelibrary/rJava/jri/examples). Se tudo der certo, o programa exibira uma srie de anlises sobre um conjunto de dados chamado iris.

6 - Em caso de erros:
Caso ocorra erro ao executar a aplicao, verifique o arquivo de exemplo.run que vem junto com o JRI.jar ( caminho: /usr/lib/R/site-library/rJava/jri). Edite o arquivo acrescentando comandos para imprimir os locais das respectivas variveis de ambiente. Adicionar as seguintes linhas antes da ultima linha do arquivo run:

echo CLASSPATH ${CLASSPATH} echo LD_LIBRARY_PATH ${LD_LIBRARY_PATH} echo java ${JAVA} echo jri $JRI_LD_PATH else r home ${R_HOME}

Listagem 10 editando o arquivo run que executa as classes de teste do jri.jar.

Executar o arquivo .run para obter os caminhos. Outras solues de erros comuns podem ser encontradas em: http://rosuda.org/JRI/

Alguns Pacotes Interessantes R


(R)library(xtable); Exporta tabelas geradas pelo R para HTML; (R) library(rgl); Exporta grficos no R. Permite 3D e Animaes; (R)vrmlgen Exporta os graficos para vrml, 3D e interativos para web.

Referncias e Sites de apoio:


http://leg.ufpr.br/Rtutorial/graphs1.html http://www.gisos.de/blog/articles/5/jri-and-eclipse-first-steps http://mithil-tech.blogspot.com/2009/11/r-and-java-jri-via-eclipse.html http://open.jira.com/wiki/display/WST/Obsoleted+-+Directions+To+Install+R+Project http://www.rc.unesp.br/igce/demac/conceicao/R/graficos.r http://www.leg.ufpr.br/~paulojus/embrapa/Rembrapa/ http://www.mayin.org/ajayshah/KB/R/index.html http://rosuda.org/rJava/ http://www.mhsatman.com/rcaller.php

Sobre o autor
Bruno Henrique de Oliveira Peixoto, graduado em Cincias da Computao pela Universidade Federal de Gois UFG. Desenvolvedor Java Web / R com experincia acadmica em Minerao de Dados. brunohop@gmail.com

Anda mungkin juga menyukai