Ligando R e Julia?

135

Julia parece muito promissora para uma computação rápida e com boa sintaxe (por exemplo, aqui ), mas eu suspeito que não chegará nem perto de R em termos de fluxo de trabalho estatístico geral por algum tempo ainda. Então, eu gostaria de usá-lo onde o C ++ é usado principalmente em programas R: para otimizar porções lentas do código. Antes de investir tempo em aprender Julia, porém, estou curioso para saber quais são as facilidades para incorporar trechos de Julia no código R.

Assim:

  • Que facilidades existem para ligar R e Julia?
  • Quão robustos e bem pensados ​​eles são, numa escala de zero a Rcpp?

Quero chamar Julia de R, assim como o Rcpp permite chamar C ++ de dentro de R agora. Não quero ligar para R da Julia. (Portanto, RCall.jl não funcionaria)

Ari B. Friedman
fonte
7
Meu palpite é que você seria um adotante muito cedo e sujeito a essas penalidades. Eu ficaria feliz em estar errado - Eu também ficaria feliz em tê-lo fazer o trabalho e preparar o caminho para nós-médios adopters ...
Ben Bolker
15
As funções que eles usam nos benchmarks de desempenho parecem uma maneira bastante incomum de usar o R: github.com/JuliaLang/julia/blob/master/test/perf/perf.R . É quase como colocar diesel em um Ferarri ...
James
2
A questão é pertinente. A ABI da AC para Julia parece estar surgindo. Há uma chance de eu ter uma facada na criação de uma interface Julia para R em breve.
Lgautier # 14/12
4
Eu tenho uma ponte Julia para R trabalhando aproximadamente ( github.com/lgautier/Rif.jl ). O inverso depende do trabalho ainda em andamento no final de Julia.
Lgautier
3
@lgautier Espero sinceramente que você consiga retomar seu trabalho. Inferno, se houvesse uma página do kickstarter para apoiar isso, eu certamente estaria lá.
precisa saber é o seguinte

Respostas:

42

O pacote RJulia R parece muito bom agora, da R., R CMD checké executado sem avisos ou erros (se juliaestiver instalado corretamente).

O maior TODO, na minha opinião, é fazer com que Julia retorne listas nomeadas que constituem a estrutura de dados gerais flexível realmente básica em R.

Observe que Doug Bates me alertou sobre o RCall de uma interface bidirecional de Julia para R (ou seja, a outra direção que não R para Julia). Além disso, Doug recomendou segmentar o julia 0.4.0 em vez das versões estáveis ​​atuais do julia.

Martin Mächler
fonte
57

Eu também olho para Julia desde que Doug Bates me enviou um alerta em janeiro . Mas, como @ gsk3, eu medi isso em uma "escala Rcpp", pois gostaria de passar objetos R ricos para Julia. E isso não parece ser suportado de momento.

Julia tem uma interface C agradável e simples. Então isso nos dá algo parecido .C(). Mas, como discutido recentemente no r-devel, você realmente não deseja .C(); na maioria dos casos, prefere .Call()passar variáveis ​​SEXP reais que representam objetos R reais. Então, neste momento, vejo pouco espaço para Julia de R por causa dessa limitação.

Talvez uma interface indireta usando tcp / ip para Rserve possa ser a primeira partida antes que Julia amadureça um pouco e tenhamos uma interface C ++ adequada. Ou usamos algo baseado em Rcpp para ir de R para C ++ antes de inserir uma camada intermediária [que alguém teria que escrever] a partir da qual alimentamos os dados para Julia, assim como a API R real oferece apenas uma camada C. Não sei.

E no final do dia, pode ser necessária alguma paciência. Comecei a olhar para o R por volta de 1996 ou 1997, quando Fritz Leisch fez os primeiros anúncios no grupo de notícias comp.os.linux.announce. E R tinha instalações bastante limitadas na época (mas a promessa completa da língua S, é claro, se soubéssemos que tínhamos um vencedor). E alguns anos depois eu estava pronto para torná-la minha principal linguagem de modelagem. Naquela época, o CRAN ainda tinha menos de 100 pacotes ...

Julia pode muito bem chegar lá. Mas, por enquanto, suspeito que muitos de nós farão o trabalho em R e tenham apenas alguns vislumbres curiosos em Julia.

Dirk Eddelbuettel
fonte
1
desde que eu saiba não há planos para julia para ter um compilador estático para permitir a incorporação em C ++ que pode ter de esperar algum tempo
pyCthon
48

O plano de desenvolvimento da Julia, como descrevi nesta resposta, é permitir a compilação do código da Julia em bibliotecas compartilhadas, chamadas através da C ABI. Quando isso acontecer, será mais fácil chamar o código Julia do R do que chamar o código C / C ++. Há, no entanto, uma quantidade razoável de trabalho necessário antes que isso se torne possível.

StefanKarpinski
fonte
4
Isso parece muito promissor. Eu (e acho que outros) consideram Julia um ótimo substituto para o uso atual do Matlab - para resultados pesados ​​em computação que ainda exigem mais intuição matemática do que C e seus tipos fornecem. Por isso, R e Julia poderiam ser um complemento incrível. Mesmo que Julia substitua R (e eu ficaria bem com isso, francamente), levará pelo menos uma década até que a biblioteca estatística em Julia seja tão rica quanto a outra, portanto, enquanto isso, os recursos de interface entre R e Julia podem ajudar a abrir -source computação estatística prosperar.
Ari B. Friedman
8
Essa situação mudou desde que você escreveu isso? (ps eu estou amando Julia, obrigado por seu trabalho sobre ele!)
Andy Hayden
23

Uma atualização rápida. Desde que essa pergunta foi feita, houve o início de um pacote Julia que permite chamar programas R a partir de Julia.

Mais aqui: https://github.com/lgautier/Rif.jl

aviks
fonte
1
Obrigado, mas veja os comentários do próprio lgautier acima. Esta é a direção oposta. Eu quero ligar para Julia de R.
Ari B. Friedman
5
+1 porque em tal tema restrito como Julia cada informação é bastante informativo
Qbik
Como o @ AriB.Friedman disse, essa informação não é nova - e todos queremos ligar para Julia de R, e não o contrário.
Martin Mächler
13

Alguém viu esse projeto?

https://github.com/armgong/RJulia

Bastante novo, mas parece estar fazendo exatamente o que é solicitado!

Adão
fonte
4
Obrigado pela dica. Na verdade, essa seria a solução se funcionasse. Tentei instalar (usando o R 3.1.2 atualizado) e julia (0.4.0-dev .. atualizado em 30 de dezembro de 2014 como pacote ubuntu). Então a compilação falhou e eu abri a edição do github github.com/armgong/RJulia/issues/10 Vamos torcer para que continuemos ... em breve
Martin Mächler
1
Algum progresso? Recebo notificações de desenvolvimento bastante ativas do repositório do github, então imagino que os problemas estão sendo resolvidos ...
Adam
2
De fato! Não acompanhou aqui - mas na página de problemas acima: Os principais problemas foram todos removidos. Eu me ofereci para aproximar o pacote da liberação (para o CRAN), adicionando páginas de ajuda úteis. Mas, infelizmente, eu estou muito envolvido em outros assuntos, então isso tem que esperar (por mim) por enquanto.
Martin Mächler 23/01
11

Crio um pacote R chamado JuliaCallrecentemente, que incorpora Julia em R. O pacote está no CRAN.

https://cran.r-project.org/web/packages/JuliaCall/index.html

https://github.com/Non-Contradiction/JuliaCall

O uso do pacote é assim:

library(JuliaCall)
julia <- julia_setup()
julia_command("a = sqrt(2)"); julia_eval("a")
julia_eval("sqrt(2)")
julia_call("sqrt", 2)
julia_eval("sqrt")(2)

Como você pode ver, você pode enviar seqüências de comando e chamar funções de Julia com muita facilidade.

E há também alguns pacotes R envolvendo pacotes Julia usando JuliaCall, por exemplo,

  • convexjlr para programação convexa disciplinada em R usando o Convex.jl, que também está no CRAN.
  • ipoptjlr, uma interface R para o Interior Point OPTimizer (IPOPT) usando o pacote Julia Ipopt.jl.

Bem-vindo para qualquer feedback sobre JuliaCall!!

Consistência
fonte
7

Há também o pacote XRJulia da família de pacotes XR com o objetivo de e X tender R por John Chambers (um dos criadores do R). Ele usa uma abordagem um pouco diferente (JSON) para transferir dados entre Julia e R, em seguida, rJulia e pacotes similares.

vh-d
fonte
5

Você também pode querer conferir minha tentativa: O JuliaConnectoRpacote R. O pacote está disponível no GitHub e CRAN .

Seu objetivo é importar funções da Julia diretamente no R, para que possam ser usadas como funções R no código R. Os valores de retorno das funções de Julia são convertidos para estruturas de dados R, que podem ser usadas em R e também passadas de volta para Julia. Para uma integração adicional de Julia e R, também é possível retornar a chamada de Julia para R passando funções R como funções de retorno de chamada.

Semelhante ao XRJulia, o JuliaConnectoR conta com o TCP, mas é funcionalmente orientado e usa um formato de fluxo personalizado otimizado em vez de mensagens JSON baseadas em texto, como o XRJulia. Uma vantagem da comunicação pelo TCP é a estabilidade em relação às diferentes versões de Julia e R. Isso é muito mais difícil de manter com uma integração no nível das interfaces C, como RCall e JuliaCall.

O pacote funciona com Julia ≥ 1.0 e uma ampla variedade de versões R.

esel
fonte