Łą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ć)


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.


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ę.


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.


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


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!


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!!


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.