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ć)
Odpowiedzi:
Pakiet RJulia R wygląda teraz całkiem nieźle z R.
R CMD check
działa bez ostrzeżeń i błędów (jeślijulia
jest 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.
źródło
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ę.
źródło
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.
źródło
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
źródło
Czy ktoś widział ten projekt?
https://github.com/armgong/RJulia
Dość nowy, ale wydaje się, że robi dokładnie to, o co proszono!
źródło
Tworzę pakiet R o nazwie
JuliaCall
niedawno, 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:
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 JuliaIpopt.jl
.Witamy w przypadku opinii na temat
JuliaCall
!!źródło
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.
źródło
Możesz także sprawdzić moją próbę:
JuliaConnectoR
pakiet 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.
źródło