Lier R et Julia?

135

Julia semble très prometteuse pour un calcul rapide et syntaxique (par exemple ici ), mais je soupçonne que cela ne sera pas près de R en termes de flux de travail statistique global pendant un certain temps encore. Je voudrais donc l'utiliser là où C ++ est principalement utilisé dans les programmes R: pour optimiser les portions lentes de code. Avant d'investir le temps dans l'apprentissage de Julia, cependant, je suis curieux de savoir quelles sont les possibilités d'incorporer des extraits de Julia dans du code R.

Alors:

  • Quelles sont les installations disponibles pour relier R et Julia?
  • Dans quelle mesure sont-ils robustes et bien pensés, sur une échelle de zéro à Rcpp?

Je veux appeler Julia depuis R, tout comme Rcpp permet d'appeler C ++ à partir de R dès maintenant. Je ne veux pas appeler R de Julia. (Donc RCall.jl ne fonctionnerait pas)

Ari B. Friedman
la source
7
Je suppose que vous seriez un des premiers à adopter et que vous seriez passible de ces sanctions. Je serais heureux de me tromper - je serais également heureux que vous fassiez le travail et que vous ouvriez la voie pour nous, les adopteurs moyens ...
Ben Bolker
15
Les fonctions qu'ils utilisent dans les benchmarks de performance semblent être une manière assez inhabituelle d'utiliser R: github.com/JuliaLang/julia/blob/master/test/perf/perf.R . C'est presque comme mettre du diesel dans un Ferarri ...
James
2
La question est pertinente. AC ABI pour Julia semble émerger. Il y a une chance que je tente de créer bientôt une interface Julia-to-R.
lgautier
4
J'ai un pont Julia-to-R qui fonctionne à peu près ( github.com/lgautier/Rif.jl ). L'inverse dépend du travail en cours du côté de Julia.
lgautier
3
@lgautier J'espère sincèrement que vous réussirez à reprendre votre travail. Bon sang, s'il y avait une page kickstarter pour soutenir cela, j'y serais sûrement.
Maxim.K

Réponses:

42

Le package RJulia R semble assez bon maintenant à partir de R. R CMD checks'exécute sans avertissements ni erreurs (s'il juliaest correctement installé).

Le plus gros TODO à mon avis est d'amener Julia à renvoyer des listes nommées qui constituent la structure de données générale flexible vraiment basique dans R.

Notez que Doug Bates m'a alerté à propos de RCall une interface bidirectionnelle de Julia à R (c'est-à-dire, l'autre direction que R vers Julia). De plus, Doug a recommandé de cibler julia 0.4.0 plutôt que les versions stables actuelles de julia.

Martin Mächler
la source
57

Moi aussi, je regarde Julia depuis que Doug Bates m'a envoyé un avertissement en janvier . Mais comme @ gsk3, je mesure cela sur une "échelle Rcpp" car je voudrais passer des objets R riches à Julia. Et cela ne semble pas du tout pris en charge pour le moment.

Julia a une interface C agréable et simple. Donc, cela nous donne quelque chose comme .C(). Mais comme récemment discuté sur r-devel, vous ne voulez vraiment pas .C(), dans la plupart des cas, vous voulez plutôt .Call()passer des variables SEXP réelles représentant des objets R réels. Donc, pour le moment, je vois peu de possibilités pour Julia de R à cause de cette limitation.

Peut-être qu'une interface indirecte utilisant tcp / ip vers Rserve pourrait être un premier départ avant que Julia ne mûrisse un peu et que nous obtenions une interface C ++ appropriée. Ou nous utilisons quelque chose basé sur Rcpp pour passer de R à C ++ avant d'entrer dans une couche intermédiaire [que quelqu'un devrait écrire] à partir de laquelle nous alimentons les données de Julia, tout comme l'API R actuelle n'offre qu'une couche C. Je sais pas.

Et à la fin de la journée, un peu de patience peut être nécessaire. J'ai commencé à regarder R vers 1996 ou 1997 lorsque Fritz Leisch a fait les premières annonces sur le newsgroup comp.os.linux.announce. Et R avait alors des installations plutôt limitées (mais la pleine promesse du langage S, bien sûr, si nous savions que nous avions un gagnant). Et quelques années plus tard, j'étais prêt à en faire mon principal langage de modélisation. À cette époque, CRAN avait encore bien moins de 100 colis ...

Julia pourrait bien y arriver. Mais pour l'instant, je soupçonne que beaucoup d'entre nous travailleront en R et n'auront que quelques aperçus curieux de Julia.

Dirk Eddelbuettel
la source
1
car à ma connaissance, il n'est pas prévu pour julia d'avoir un compilateur statique pour permettre l'intégration en C ++, nous devrons peut-être attendre un certain temps
pyCthon
48

Le plan de développement de Julia, comme je l'ai décrit dans cette réponse, est de permettre la compilation du code Julia dans des bibliothèques partagées, appelables à l'aide de l'ABI C. Une fois que cela se produit, il sera aussi facile d'appeler du code Julia à partir de R que d'appeler du code C / C ++. Il y a, cependant, une bonne quantité de travail requise avant que cela ne devienne possible.

StefanKarpinski
la source
4
Cela semble très prometteur. Je (et je pense que d'autres) considèrent Julia comme un excellent substitut à la façon dont Matlab est actuellement utilisé - pour des résultats lourds de calcul qui nécessitent toujours plus d'intuition mathématique que C et ses semblables. Pour cela, R et Julia pourraient être un complément incroyable. Même si Julia supplante R (et je serais d'accord avec ça, franchement), il faudra au moins une décennie avant que la bibliothèque statistique de Julia soit presque aussi riche, donc en attendant, les capacités d'interfaçage entre R et Julia peuvent aider à ouvrir -Le calcul statistique des sources prospère.
Ari B.Friedman
8
Cette situation a-t-elle changé depuis que vous avez écrit ceci? (ps je suis aimer Julia, merci pour votre travail là - dessus!)
Andy Hayden
23

Une mise à jour rapide. Depuis que cette question a été posée, il y a eu les débuts d'un package Julia qui permet d'appeler des programmes R depuis Julia.

Plus ici: https://github.com/lgautier/Rif.jl

aviks
la source
1
Merci, mais voir les commentaires de lgautier lui-même ci-dessus. C'est la direction opposée. Je veux appeler Julia depuis R.
Ari B. Friedman
5
+1 parce que dans un sujet aussi restreint que Julia, chaque info est assez informative
Qbik
Comme @ AriB.Friedman l'a dit, ce n'est pas une nouvelle info - et nous voulons tous appeler Julia de R, et non l'inverse.
Martin Mächler
13

Quelqu'un at-il vu ce projet?

https://github.com/armgong/RJulia

Assez nouveau mais semble faire exactement ce qui est demandé!

Adam
la source
4
Merci pour l'indice. En effet, ce serait la solution si cela fonctionnait. J'ai essayé d'installer (en utilisant le correctif R 3.1.2 très actuel) et julia (0.4.0-dev .. mis à jour le 30 décembre 2014 en tant que package ubuntu). Puis la compilation a échoué et j'ai ouvert le numéro de github github.com/armgong/RJulia/issues/10 Espérons que nous irons plus loin ... bientôt
Martin Mächler
1
Aucun progrès? Je reçois des notifications de développement assez actives de leur dépôt github, alors j'imagine que les problèmes sont en cours de résolution ...
Adam
2
En effet! N'a pas suivi ici - mais sur la page des problèmes ci-dessus: les problèmes majeurs ont tous été supprimés. Je m'étais porté volontaire pour rapprocher le package de sa libération (vers CRAN), notamment en ajoutant des pages d'aide utiles. Mais malheureusement, je suis trop plongé dans d'autres questions très occupées, donc cela doit attendre (pour moi) pour l'instant.
Martin Mächler
11

Je crée un package R appelé JuliaCallrécemment, qui intègre Julia dans R. Le package est sur CRAN.

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

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

L'utilisation du package est comme ceci:

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)

Comme vous pouvez le voir, vous pouvez envoyer des chaînes de commande et appeler des fonctions Julia très facilement.

Et il existe également des packages R enveloppant des packages Julia en utilisant JuliaCall, par exemple,

  • convexjlr pour la programmation convexe disciplinée dans R en utilisant Convex.jl, qui est également sur CRAN.
  • ipoptjlr, une interface R pour OPTimizer Interior Point (IPOPT) utilisant le package Julia Ipopt.jl.

Bienvenue pour tout commentaire sur JuliaCall!!

Cohérence
la source
7

Il existe également le package XRJulia de la famille de packages XR visant à e X tend R de John Chambers (l'un des créateurs de R). Il utilise une approche un peu différente (JSON) pour transférer des données entre Julia et R puis rJulia et des packages similaires.

vh-d
la source
5

Vous voudrez peut-être également consulter ma tentative: le JuliaConnectoRpackage R. Le package est disponible sur GitHub et CRAN .

Son objectif est d'importer des fonctions de Julia directement dans R afin qu'elles puissent être utilisées comme des fonctions R dans le code R. Les valeurs de retour des fonctions Julia sont traduites en structures de données R, qui peuvent être utilisées dans R et également renvoyées à Julia. Pour une intégration plus poussée de Julia et R, il est également possible de rappeler de Julia à R en passant des fonctions R en tant que fonctions de rappel.

Semblable à XRJulia, JuliaConnectoR repose sur TCP, mais il est orienté fonctionnellement et utilise un format de diffusion personnalisé optimisé au lieu de messages JSON basés sur du texte comme le fait XRJulia. Un avantage de la communication par TCP est la stabilité vis-à-vis des différentes versions de Julia et R. C'est beaucoup plus difficile à maintenir avec une intégration au niveau des interfaces C comme le font RCall et JuliaCall.

Le package fonctionne avec Julia ≥ 1.0 et une large gamme de versions R.

esel
la source