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)
Antworten:
Das RJulia R-Paket sieht jetzt ziemlich gut aus, da R.
R CMD check
ohne 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.
quelle
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.
quelle
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.
quelle
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
quelle
Hat jemand dieses Projekt gesehen?
https://github.com/armgong/RJulia
Ziemlich neu, scheint aber genau das zu tun, was verlangt wird!
quelle
Ich erstelle ein
JuliaCall
kü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:
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
JuliaCall
beispielsweise verpackenconvexjlr
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-PaketIpopt.jl
.Willkommen für jedes Feedback zu
JuliaCall
!!quelle
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.
quelle
Vielleicht möchten Sie auch meinen Versuch überprüfen: Das
JuliaConnectoR
R-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.
quelle