R und Julia verbinden?

135

Julia sieht für eine schnelle und syntaktisch vernünftige Berechnung (z. B. hier ) sehr vielversprechend aus , aber ich vermute, dass sie in Bezug auf den gesamten Statistik-Workflow noch einige Zeit nicht in der Nähe von R liegen wird. Daher möchte ich es dort verwenden, wo C ++ hauptsächlich in R-Programmen verwendet wird: um langsame Teile des Codes zu optimieren. Bevor ich die Zeit in das Erlernen von Julia investiere, bin ich gespannt, welche Möglichkeiten es gibt, Julia-Schnipsel in R-Code einzubetten.

So:

  • Welche Möglichkeiten gibt es, um R und Julia zu verbinden?
  • Wie robust und durchdacht sind sie auf einer Skala von Null bis Rcpp?

Ich möchte Julia von R aus anrufen, so wie Rcpp es gerade erlaubt, C ++ aus R heraus aufzurufen. Ich möchte R nicht von Julia anrufen. (Also würde RCall.jl nicht funktionieren)

Ari B. Friedman
quelle
7
Ich vermute, dass Sie ein sehr früher Anwender sind und diesen Strafen unterliegen. Ich würde mich freuen, falsch zu liegen - ich würde mich auch freuen, wenn Sie die Arbeit erledigen und uns den Weg für uns mittelgroße Anwender ebnen würden ...
Ben Bolker
15
Die Funktionen, die sie in den Leistungsbenchmarks verwenden, scheinen eine ziemlich ungewöhnliche Art zu sein, R zu verwenden: github.com/JuliaLang/julia/blob/master/test/perf/perf.R . Es ist fast so, als würde man Diesel in einen Ferarri stecken ...
James
2
Die Frage ist relevant. AC ABI für Julia scheint sich abzuzeichnen. Es besteht die Möglichkeit, dass ich bald versuchen werde, eine Julia-zu-R-Schnittstelle zu erstellen.
lgautier
4
Ich habe eine Julia-zu-R-Brücke, die ungefähr funktioniert ( github.com/lgautier/Rif.jl ). Umgekehrt zu gehen, hängt davon ab, ob am Ende von Julia noch gearbeitet wird.
lgautier
3
@lgautier Ich hoffe aufrichtig, dass Sie es schaffen, Ihre Arbeit wieder aufzunehmen. Zur Hölle, wenn es eine Kickstarter-Seite gäbe, die dies unterstützt, wäre ich sicher da.
Maxim.K

Antworten:

42

Das RJulia R-Paket sieht jetzt ziemlich gut aus, da R. R CMD checkohne Warnungen oder Fehler läuft (wennjulia es ordnungsgemäß installiert ist).

Meiner Ansicht nach ist es das größte TODO, Julia dazu zu bringen, benannte Listen zurückzugeben, die die wirklich grundlegende flexible allgemeine Datenstruktur in R bilden.

Beachten Sie, dass Doug Bates mich auf RCall aufmerksam gemacht hat, eine bidirektionale Schnittstelle von Julia nach R (dh die andere Richtung als R nach Julia). Außerdem empfahl Doug, Julia 0.4.0 anstelle der aktuellen stabilen Versionen von Julia zu verwenden.

Martin Mächler
quelle
57

Auch ich habe Julia angesehen, seit Doug Bates mir im Januar ein Heads-up geschickt hat . Aber wie bei @ gsk3 messe ich dies auf einer "Rcpp-Skala", da ich Julia reichhaltige R-Objekte übergeben möchte. Und das scheint momentan überhaupt nicht unterstützt zu werden.

Julia hat eine schöne und einfache C-Oberfläche. Das bringt uns so etwas wie .C(). Aber wie kürzlich auf r-devel besprochen, möchten Sie wirklich nicht .C(), in den meisten Fällen möchten Sie lieber .Call(), um tatsächliche SEXP-Variablen zu übergeben, die echte R-Objekte darstellen. Im Moment sehe ich aufgrund dieser Einschränkung wenig Spielraum für Julia von R.

Vielleicht könnte eine indirekte Schnittstelle mit tcp / ip zu Rserve ein erster Start sein, bevor Julia ein wenig reift und wir eine richtige C ++ - Schnittstelle bekommen. Oder wir verwenden etwas, das auf Rcpp basiert, um von R nach C ++ zu gelangen, bevor wir eine Zwischenebene [die jemand schreiben müsste] eingeben, von der wir Daten an Julia senden, genau wie die eigentliche R-API nur eine C-Ebene bietet. Keine Ahnung.

Und am Ende des Tages kann etwas Geduld erforderlich sein. Ich begann mich 1996 oder 1997 mit R zu beschäftigen, als Fritz Leisch die ersten Ankündigungen in der Newsgroup comp.os.linux.announce machte. Und R hatte damals eher begrenzte Möglichkeiten (aber das volle Versprechen der S-Sprache natürlich, si wir wussten, dass wir einen Gewinner hatten). Und ein paar Jahre später war ich bereit, es zu meiner primären Modellierungssprache zu machen. Zu dieser Zeit hatte CRAN noch weit weniger als 100 Pakete ...

Julia könnte gut dorthin gelangen. Aber im Moment vermute ich, dass viele von uns ihre Arbeit in R erledigen werden und nur ein paar neugierige Einblicke in Julia haben.

Dirk Eddelbuettel
quelle
1
Da es meines Wissens keine Pläne für Julia gibt, einen statischen Compiler zu haben, um das Einbetten in C ++ zu ermöglichen, müssen wir möglicherweise einige Zeit warten
pyCthon
48

Der Julia-Entwicklungsplan, wie ich in dieser Antwort beschrieben habe , sieht die Kompilierung von Julia-Code in gemeinsam genutzten Bibliotheken vor, die mit dem C ABI aufgerufen werden können. Sobald dies geschieht, ist es genauso einfach, Julia-Code von R aus aufzurufen wie C / C ++ - Code. Es ist jedoch ein angemessener Arbeitsaufwand erforderlich, bevor dies möglich wird.

StefanKarpinski
quelle
4
Das klingt sehr vielversprechend. Ich (und ich denke andere) sehen Julia als einen großartigen Ersatz für die derzeitige Verwendung von Matlab - für rechenintensive Ergebnisse, die immer noch mehr mathematische Intuition erfordern als C und seine Produkte. Dafür könnten R und Julia eine erstaunliche Ergänzung sein. Selbst wenn Julia R ersetzt (und ich würde ehrlich gesagt damit einverstanden sein), wird es mindestens ein Jahrzehnt dauern, bis die statistische Bibliothek in Julia annähernd so umfangreich ist, sodass in der Zwischenzeit Schnittstellen zwischen R und Julia hilfreich sein können -Quelle statistische Berechnung gedeihen.
Ari B. Friedman
8
Hat sich diese Situation geändert, seit Sie dies geschrieben haben? (ps Ich liebe Julia, danke für deine Arbeit daran!)
Andy Hayden
23

Ein schnelles Update. Seit diese Frage gestellt wurde, gab es die Anfänge eines Julia-Pakets, mit dem man R-Programme aus Julia heraus aufrufen kann.

Mehr hier: https://github.com/lgautier/Rif.jl

Aviks
quelle
1
Danke, aber siehe Kommentare von lgautier selbst oben. Dies ist die entgegengesetzte Richtung. Ich möchte Julia aus R.
Ari B. Friedman
5
+1, weil in einem so engen Thema wie Julia jede Information sehr informativ ist
Qbik
Wie @ AriB.Friedman sagte, ist dies keine neue Information - und wir alle wollen Julia von R aus anrufen, nicht umgekehrt.
Martin Mächler
13

Hat jemand dieses Projekt gesehen?

https://github.com/armgong/RJulia

Ziemlich neu, scheint aber genau das zu tun, was verlangt wird!

Adam
quelle
4
Danke für den Tipp. In der Tat wäre dies die Lösung, wenn es funktionieren würde. Ich habe versucht, Julia (0.4.0-dev .. aktualisiert am 30. Dezember 2014 als Ubuntu-Paket) zu installieren (unter Verwendung des aktuellen R 3.1.2-Patches). Dann schlug die Kompilierung fehl und ich öffnete die Github-Ausgabe github.com/armgong/RJulia/issues/10 Hoffen wir, dass wir weiter kommen ... bald
Martin Mächler
1
Irgendein Fortschritt? Ich bekomme ziemlich aktive Entwicklungsbenachrichtigungen von ihrem Github-Repo, also würde ich mir vorstellen, dass die Probleme behoben werden ...
Adam
2
Tatsächlich! Wurde hier nicht weiterverfolgt - aber auf der obigen Problemseite: Alle Hauptprobleme wurden behoben. Ich hatte mich freiwillig bereit erklärt, das Paket der Freigabe (für CRAN) näher zu bringen, indem ich nützliche Hilfeseiten hinzufügte. Aber leider bin ich zu tief in andere geschäftige Angelegenheiten vertieft, daher muss dies (auf mich) erst einmal warten.
Martin Mächler
11

Ich erstelle ein JuliaCallkürzlich aufgerufenes R-Paket , das Julia in R einbettet. Das Paket befindet sich auf CRAN.

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

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

Die Verwendung des Pakets ist wie folgt:

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)

Wie Sie sehen können, können Sie ganz einfach Befehlszeichenfolgen senden und Julia-Funktionen aufrufen.

Und es gibt auch einige R-Pakete, die Julia-Pakete mit JuliaCallbeispielsweise verpacken

  • convexjlr für disziplinierte konvexe Programmierung in R mit Convex.jl, das sich ebenfalls auf CRAN befindet.
  • ipoptjlr, eine R-Schnittstelle für Interior Point OPTimizer (IPOPT) mit Julia-Paket Ipopt.jl.

Willkommen für jedes Feedback zu JuliaCall!!

Konsistenz
quelle
7

Es besteht auch das XRJulia Paket von XR - Familie von Paketen des Ziel, e X neigt R von John Chambers (einer der Schöpfer von R). Es verwendet einen etwas anderen Ansatz (JSON), um Daten zwischen Julia und R zu übertragen, dann rJulia und ähnliche Pakete.

vh-d
quelle
5

Vielleicht möchten Sie auch meinen Versuch überprüfen: Das JuliaConnectoRR-Paket. Das Paket ist bei GitHub und CRAN erhältlich .

Ziel ist es, Funktionen von Julia direkt in R zu importieren, sodass sie wie R-Funktionen in R-Code verwendet werden können. Die Rückgabewerte von Julia-Funktionen werden in R-Datenstrukturen übersetzt, die in R verwendet und auch an Julia zurückgegeben werden können. Für eine weitere Integration von Julia und R ist es auch möglich, von Julia nach R zurückzurufen, indem R-Funktionen als Rückruffunktionen übergeben werden.

Ähnlich wie XRJulia basiert JuliaConnectoR auf TCP, ist jedoch funktional orientiert und verwendet ein optimiertes benutzerdefiniertes Streaming-Format anstelle von textbasierten JSON-Nachrichten wie XRJulia. Ein Vorteil der Kommunikation über TCP ist die Stabilität in Bezug auf verschiedene Versionen von Julia und R. Dies ist bei einer Integration auf der Ebene von C-Schnittstellen wie RCall und JuliaCall viel schwieriger aufrechtzuerhalten.

Das Paket funktioniert mit Julia ≥ 1.0 und einer Vielzahl von R-Versionen.

esel
quelle