integração Java-R?

votos
49

Eu tenho um aplicativo Java que precisa para executar regressão por mínimos quadrados parciais. Parece não há implementações de Java de PLSR lá fora. Weka poderia ter tido algo parecido em algum momento, mas já não está na API. Por outro lado, eu encontrei uma boa implementação R, que tem um bônus adicional a ele. Foi usado pelas pessoas cujo resultado que eu quero para replicar, o que significa que há menos chance de que as coisas vão dar errado por causa de diferenças na forma PLSR é implementado.

A questão é: existe uma boa o suficiente (e simples de usar) pacote que permitem Java para chamar R, passar em alguns parâmetros para uma função e ler os resultados? Minha outra opção é ter Java desova R em um processo e, em seguida, monitorá-lo. Os dados seriam lidos e gravados no disco. Qual dos dois você recomendaria? Estou faltando a terceira opção óbvia?

Publicado 16/09/2011 em 23:49
fonte usuário
Em outras línguas...                            


8 respostas

votos
1

Eu tinha necessidade semelhante um tempo atrás e testou algumas das interfaces para R. O que eu encontrei para ser o melhor para minhas necessidades (janelas, c #) foi Rserve que eu acredito que é escrito em Java. Minha única queixa com ele é que ele não era 64-bit. Eu usei um cliente simples escrito em C # e funcionou muito bem. Tenho certeza de que o cliente Java é muito melhor.

Respondeu 17/09/2011 em 06:22
fonte usuário

votos
10

Houve trabalho de Duncan Temple Lang: http://rss.acs.unt.edu/Rdoc/library/SJava/Docs/RFromJava.pdf .

Meu palpite quanto à solução mais robusta seria JGR . Os desenvolvedores do JGR tem uma lista de discussão, Stats-Rosuda ea lista de discussão Arquivo indica a lista permanece ativo a partir de 2013.

Há também o código que foi colocado no GoogleCode , com um exemplo aqui: http://stdioe.blogspot.com/2011/07/rcaller-20-calling-r-from-java.html

Respondeu 17/09/2011 em 13:47
fonte usuário

votos
47

Eu tenho usado com sucesso duas alternativas no passado.

JRI

  • Prós : provavelmente um melhor desempenho.
  • Contras : você tem que configurar algumas variáveis de ambiente e bibliotecas, diferentes em Win / UNIX.

RServe

  • Prós : fácil de configurar, você não precisa para inicializar R ou link contra qualquer biblioteca R, pode ser executado em uma máquina diferente.
  • Contras : com base em TCP / IP (um servidor está em execução), não houve chamadas de retorno de R.

Outras alternativas Eu nunca utilizados: RCaller

Respondeu 17/09/2011 em 14:20
fonte usuário

votos
3

JRI tem de baixo nível e interface de alto nível para Ligar R de Java. Existe um plugin do Eclipse que ajuda a configurar o ambiente R Java em http://www.studytrails.com/RJava-Eclipse-Plugin/ .

Respondeu 05/01/2013 em 09:47
fonte usuário

votos
8

Esta é uma questão de idade .. mas para qualquer pessoa visitar aqui que ainda está interessado: Eu escrevi um artigo no blog que fornece um exemplo detalhado de como usar JRI / rjava (a base da ponte JNI) para fazer este tipo de coisa (o quão -para está focada em ambientes dev Linux). Eu também comparar e contrastar as abordagens alternativas para fazer coisas 'mathy' chamando para R e estruturas semelhantes.

URL> http://buildlackey.com/integrating-r-and-java-with-jrirjava-a-jni-based-bridge/

Respondeu 21/10/2013 em 22:48
fonte usuário

votos
3

Esta parece ser uma questão antiga. No entanto Rserve e rJava são dois bons pacotes para integrar R com Java. Seguintes blogs explicar o uso de ambas as bibliotecas.

Para rJava: http://www.codophile.com/how-to-integrate-r-with-java-using-rjava/

Para Rserve: http://www.codophile.com/how-to-integrate-r-with-java-using-rserve/

Espero que isso ajude.

Respondeu 13/05/2015 em 08:16
fonte usuário

votos
5

Renjin é uma alternativa que permite não só a integração de muitos pacotes de R também uma comunicação fácil ir entre Java e R através de objetos:

http://www.renjin.org/

Respondeu 15/07/2015 em 18:05
fonte usuário

votos
1

FASTR é um GraalVM implementação baseada de R. incorporá-lo em um aplicativo de JVM é tão simples como:

Context ctx = Context.newBuilder("R").allowAllAccess(true).build();
ctx.eval("R", "sum").execute(new int[] {1,2,3});

Mais detalhes neste artigo: https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb

Respondeu 11/10/2018 em 19:42
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more