Łączysz R i Julię?

135

Julia wygląda bardzo obiecująco w szybkich i rozsądnych obliczeniach (np. Tutaj ), ale podejrzewam, że jeszcze przez jakiś czas nie będzie w pobliżu R pod względem ogólnych statystyk. Więc chciałbym go użyć tam, gdzie C ++ jest używany głównie w programach R: do optymalizacji wolnych fragmentów kodu. Zanim jednak zainwestuję czas w naukę Julii, jestem ciekaw, jakie udogodnienia są dostępne do osadzania fragmentów Julii w kodzie R.

Więc:

  • Jakie są możliwości łączenia R i Julii?
  • Jak solidne i przemyślane są one w skali od zera do Rcpp?

Chcę zadzwonić do Julii z R, tak jak Rcpp pozwala teraz wywoływać C ++ z R. Nie chcę dzwonić do R od Julii. (Więc RCall.jl nie będzie działać)

Ari B. Friedman
źródło
7
Moje przypuszczenie jest, że byłbyś bardzo wcześnie przysposabiający i podlega tych kar. Byłbym szczęśliwy, gdyby się mylił - byłbym również szczęśliwy, gdybyś wykonał tę pracę i utorował drogę dla nas, średnio
adaptujących się
15
Funkcje, których używają w testach wydajności, wydają się dość nietypowym sposobem korzystania z R: github.com/JuliaLang/julia/blob/master/test/perf/perf.R . To prawie jak wlewanie oleju napędowego do Ferarri ...
James
2
Pytanie jest istotne. Wydaje się, że pojawia się AC ABI dla Julii. Jest szansa, że ​​wkrótce będę miał próbę stworzenia interfejsu Julia-R.
lgautier
4
Mam most Julia-R z grubsza działający ( github.com/lgautier/Rif.jl ). Odwrotna sytuacja zależy od pracy, która jest jeszcze w toku po stronie Julii.
lgautier
3
@lgautier Mam szczerą nadzieję, że uda Ci się wznowić pracę. Do diabła, gdyby istniała strona Kickstartera, która to wspierała, na pewno tam byłbym.
Maxim.K

Odpowiedzi:

42

Pakiet RJulia R wygląda teraz całkiem nieźle z R. R CMD checkdziała bez ostrzeżeń i błędów (jeśli juliajest poprawnie zainstalowany).

Moim zdaniem największym TODO jest skłonienie Julii do zwrócenia nazwanych list, które stanowią naprawdę podstawową elastyczną ogólną strukturę danych w R.

Zwróć uwagę, że Doug Bates zaalarmował mnie o RCWybierz dwukierunkowy interfejs od Julii do R (tj. Inny kierunek niż R do Julii). Ponadto Doug zalecił kierowanie na julię w wersji 0.4.0 zamiast na aktualne stabilne wersje julii.

Martin Mächler
źródło
57

Ja też patrzyłem na Julię, odkąd Doug Bates wysłał mi ostrzeżenie w styczniu . Ale podobnie jak @ gsk3, mierzę to w „skali Rcpp”, ponieważ chciałbym przekazać Julii bogate obiekty R. Wydaje się, że w tej chwili w ogóle nie jest to obsługiwane.

Julia ma ładny i prosty interfejs C. Więc to daje nam coś takiego .C(). Ale jak ostatnio omawialiśmy na r-devel, naprawdę nie chcesz .C(), w większości przypadków wolisz .Call()przekazywać rzeczywiste zmienne SEXP reprezentujące rzeczywiste obiekty R. Więc teraz widzę małe pole do popisu dla Julii z R. z powodu tego ograniczenia.

Może pośredni interfejs wykorzystujący tcp / ip do Rserve mógłby być pierwszym początkiem, zanim Julia trochę dojrzeje i otrzymamy odpowiedni interfejs C ++. Albo używamy czegoś opartego na Rcpp, aby przejść z R do C ++, zanim wejdziemy do warstwy pośredniej [którą ktoś musiałby napisać], z której przesyłamy dane do Julii, tak jak rzeczywisty R API oferuje tylko warstwę C. Nie wiem.

Na koniec dnia może być potrzebna cierpliwość. Zacząłem patrzeć na R około 1996 lub 1997 r., Kiedy Fritz Leisch opublikował pierwsze ogłoszenia na grupie dyskusyjnej comp.os.linux.announce. A R miał wtedy raczej ograniczone możliwości (ale pełna obietnica języka S, oczywiście, wiedzieliśmy, że mamy zwycięzcę). Kilka lat później byłem gotowy, aby uczynić go moim podstawowym językiem modelowania. W tym czasie CRAN miał nadal znacznie mniej niż 100 pakietów ...

Julia może się tam dostać. Ale na razie podejrzewam, że wielu z nas wykona pracę w R i ma tylko kilka ciekawych spojrzeń na Julię.

Dirk Eddelbuettel
źródło
1
ponieważ o ile mi wiadomo, julia nie planuje posiadania statycznego kompilatora, który umożliwi osadzanie w C ++, być może będziemy musieli trochę poczekać
pyCthon
48

Plan rozwoju Julii, jak opisałem w tej odpowiedzi, polega na umożliwieniu kompilacji kodu Julii do bibliotek współdzielonych, wywoływanych za pomocą C ABI. Gdy to się stanie, wywołanie kodu Julii z języka R będzie równie łatwe, jak wywołanie kodu C / C ++. Jednak zanim stanie się to możliwe, potrzeba sporo pracy.

Stefan Karpiński
źródło
4
Brzmi to bardzo obiecująco. Ja (i myślę, że inni) postrzegam Julię jako świetny zamiennik tego, jak obecnie używany jest Matlab - w przypadku wyników wymagających dużej liczby obliczeń, które nadal wymagają większej intuicji matematycznej niż C i mu podobne. W tym celu R i Julia mogą być niesamowitym uzupełnieniem. Nawet jeśli Julia zastąpi R (i szczerze mówiąc, nie miałbym nic przeciwko temu), minie przynajmniej dekada, zanim biblioteka statystyczna w Julii będzie prawie tak bogata, więc w międzyczasie możliwości łączenia między R i Julią mogą pomóc w otwarciu - źródła obliczeń statystycznych kwitną.
Ari B. Friedman
8
Czy ta sytuacja zmieniła się od czasu, gdy to napisałeś? (ps jestem kochający Julia, dzięki za pracę nad nim!)
Andy Hayden
23

Szybka aktualizacja. Odkąd padło to pytanie, powstał pakiet Julia, który umożliwia wywoływanie programów R z poziomu Julii.

Więcej tutaj: https://github.com/lgautier/Rif.jl

aviks
źródło
1
Dzięki, ale zobacz komentarze samego lgautiera powyżej. To jest w przeciwnym kierunku. Chcę zadzwonić do Julii z R.
Ari B. Friedman
5
+1, ponieważ w tak wąskim temacie jak Julia każda informacja jest dość pouczająca
Qbik
Jak powiedział @ AriB.Friedman, to żadnych nowych informacji - i wszyscy chcemy zadzwonić do Julii z R, a nie na odwrót.
Martin Mächler
13

Czy ktoś widział ten projekt?

https://github.com/armgong/RJulia

Dość nowy, ale wydaje się, że robi dokładnie to, o co proszono!

Adam
źródło
4
Dzięki za podpowiedź. Rzeczywiście, byłoby to rozwiązanie, gdyby zadziałało. Próbowałem zainstalować (używając bardzo aktualnej łatki R 3.1.2) i Julię (0.4.0-dev .. zaktualizowane 30 grudnia 2014 r. Jako pakiet ubuntu). Wtedy kompilacja się nie powiodła i otworzyłem numer github github.com/armgong/RJulia/issues/10 Miejmy nadzieję, że pójdziemy dalej ... wkrótce
Martin Mächler
1
Jakiś postęp? Otrzymuję dość aktywne powiadomienia o programistach z ich repozytorium na githubie, więc wyobrażam sobie, że problemy są rozwiązywane ...
Adam
2
W rzeczy samej! Nie kontynuowałem tutaj - ale na stronie problemów powyżej: wszystkie główne problemy zostały usunięte. Zgłosiłem się na ochotnika, aby zbliżyć pakiet do wydania (do CRAN), mianowicie poprzez dodanie przydatnych stron pomocy. Ale niestety jestem zbyt pogrążony w innych zajętych sprawach, więc na razie to musi poczekać (na mnie).
Martin Mächler
11

Tworzę pakiet R o nazwie JuliaCallniedawno, który osadza Julię w języku R. Pakiet znajduje się w CRAN.

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

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

Korzystanie z pakietu wygląda następująco:

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)

Jak widać, można bardzo łatwo wysyłać ciągi poleceń i wywoływać funkcje Julii.

Są też pakiety R, które owijają paczki Julii za pomocą JuliaCall, na przykład,

  • convexjlr do zdyscyplinowanego programowania wypukłego w języku R przy użyciu Convex.jl, który również znajduje się na CRAN.
  • ipoptjlr, interfejs R dla opcji Interior Point OPTimizer (IPOPT) przy użyciu pakietu Julia Ipopt.jl.

Witamy w przypadku opinii na temat JuliaCall!!

Konsystencja
źródło
7

Istnieje również pakiet XRJulia z rodziny pakietów XR mających na celu e X tend R autorstwa Johna Chambersa (jednego z twórców R). Używa nieco innego podejścia (JSON) do przesyłania danych między Julią i R, a następnie rJulią i podobnymi pakietami.

vh-d
źródło
5

Możesz także sprawdzić moją próbę: JuliaConnectoRpakiet R. Pakiet jest dostępny w GitHub i CRAN .

Jego celem jest importowanie funkcji z Julii bezpośrednio do języka R, tak aby można było ich używać jak funkcji R w kodzie R. Zwracane wartości funkcji Julia są tłumaczone na struktury danych języka R, których można używać w języku R, a także przekazywać z powrotem do Julii. W celu dalszej integracji Julii i R możliwe jest również wywołanie zwrotne z Julii do R, przekazując funkcje R jako funkcje zwrotne.

Podobnie jak XRJulia, JuliaConnectoR opiera się na TCP, ale jest zorientowany funkcjonalnie i używa zoptymalizowanego niestandardowego formatu przesyłania strumieniowego zamiast tekstowych wiadomości JSON, jak robi to XRJulia. Jedną z zalet komunikacji przez TCP jest stabilność w odniesieniu do różnych wersji Julii i R. Jest to znacznie trudniejsze do utrzymania dzięki integracji na poziomie interfejsów C, takich jak RCall i JuliaCall.

Pakiet działa z Julią ≥ 1.0 i szeroką gamą wersji R.

esel
źródło