Пов’язуючи Р і Джулію?


135

Джулія виглядає дуже перспективно для швидких та синтаксичних обчислень (наприклад, тут ), але я підозрюю, що вона ще не буде десь поблизу R з точки зору загального робочого процесу статистики. Тому я хотів би використовувати його там, де C ++ використовується в основному в програмах R: для оптимізації повільних частин коду. Перш ніж я вклав час у вивчення Юлії, мені цікаво, які існують засоби для вбудовування фрагментів Юлії в код R.

Так:

  • Які там споруди для зв’язку R та Джулії?
  • Наскільки міцні і продумані вони, за шкалою від нуля до Rcpp?

Я хочу зателефонувати Джулії з R, так як Rcpp дозволяє телефонувати на C ++ зсередини R прямо зараз. Я не хочу телефонувати на Р від Джулії. (Так RCall.jl не працюватиме)


7
Я здогадуюсь , що ви були б дуже ранньою особою, яка підлягає застосуванню, і будете застосовані до цих покарань. Я був би радий помилятися - я також буду радий, що ти зробиш цю роботу і прокладеш дорогу для нас серед серед усиновителів ...
Бен Болкер

15
Функції, які вони використовують у показниках продуктивності, здаються досить незвичним способом використання R: github.com/JuliaLang/julia/blob/master/test/perf/perf.R . Це майже як введення дизеля в Ferarri ...
Джеймс

2
Питання актуальне. AC ABI для Джулії, здається, з'являється. Є ймовірність, що у мене незабаром буде налаштовано створення інтерфейсу Julia-R.
lgautier

4
У мене майже працює міст Julia-R-R ( github.com/lgautier/Rif.jl ). Йти навпаки, залежить від роботи, яка ще триває в кінці Юлії.
lgautier

3
@lgautier Я щиро сподіваюся, що вам вдасться відновити свою роботу. Чорт, якби була сторінка kickstarter, яка б це підтримала, я б точно був там.
Максим.К

Відповіді:


42

Пакет RJulia R зараз виглядає досить непогано з R. R CMD checkпрацює без попереджень або помилок (якщо juliaвін встановлений правильно).

Найбільший TODO, на мій погляд, - це змусити Юлію повертати названі списки, які складають дійсно основну гнучку загальну структуру даних у Р.

Зауважте, що Дуг Бейтс попередив мене про RCall двонаправленому інтерфейсі від Джулії до R (тобто іншого напрямку, ніж R до Джулії). Також Дуг рекомендував орієнтуватися на julia 0.4.0, а не на існуючі стабільні версії julia.


57

Я теж дивлюся на Джулію з тих пір, як Дуг Бейтс відправив мене в січні в голову . Але як @ gsk3, я вимірюю це за "шкалою Rcpp" так, як я хотів би передати багаті об'єкти R Юлії. І це, схоже, зараз не підтримується.

Джулія має приємний та простий інтерфейс C. Так що у нас виходить щось на кшталт .C(). Але, як нещодавно обговорювалося на r-devel, ви дійсно не хочете .C(), в більшості випадків ви хочете .Call(), щоб передати фактичні змінні SEXP, що представляють реальні об'єкти R. Тож зараз я бачу невеликий обсяг для Юлії з R через це обмеження.

Можливо, непрямий інтерфейс, що використовує tcp / ip для Rserve, може стати першим запуском, перш ніж Юлія трохи дозріє, і ми отримаємо належний інтерфейс C ++. Або ми використовуємо щось на основі Rcpp, щоб дістатися з R до C ++, перш ніж ми введемо проміжний шар [який хтось повинен буде написати], з якого ми подаємо дані до Джулії, подібно до того, як власне API API пропонує лише рівень C. Данно.

І наприкінці дня може знадобитися трохи терпіння. Я почав розглядати R приблизно в 1996 або 1997 році, коли Фріц Лейш зробив перші повідомлення про групу новин comp.os.linux.announce. І тоді R мав досить обмежені можливості (але повна обіцянка мови S, звичайно, ми знали, що у нас є переможець). А через кілька років я був готовий зробити це моєю основною мовою моделювання. На той час у CRAN ще було менше 100 пакунків ...

Юлія цілком може потрапити туди. Але зараз я підозрюю, що багато хто з нас зроблять роботу в R, і мають лише кілька цікавих поглядів на Джулію.



48

План розвитку Джулії, як я описав у цій відповіді, полягає у тому, щоб дозволити компіляцію коду Джулії до спільних бібліотек, які можна називати за допомогою C ABI. Як тільки це станеться, буде так само просто зателефонувати на код Юлії з R, як і на C / C ++. Однак, перш ніж це стане можливим, необхідна робота.


4
Це звучить дуже перспективно. Я (і я думаю, що інші) бачу Джулію як чудову заміну в тому, як Matlab використовується в даний час - для обчислювальних результатів, які все ще потребують більшої математичної інтуїції, ніж C та його ілк. Для цього R та Джулія можуть стати дивовижним доповненням. Навіть якщо Джулія витіснить R (і я б із цим добре, відверто кажучи), мине щонайменше десятиліття, перш ніж статистична бібліотека в Джулії буде десь поблизу такою ж багатою, тому тим часом можливості взаємодії між R та Джулією можуть допомогти відкрити -процвітають статистичні обчислення джерел.
Арі Б. Фрідман

8
Чи змінилася ця ситуація з того часу, як ви це написали? (ps Я люблю Джулію, дякую за вашу роботу над цим!)
Енді Хайден

23

Швидке оновлення. Оскільки це питання було задано, з'явився початок пакету Julia, який дозволяє викликати програми R зсередини Julia.

Детальніше тут: https://github.com/lgautier/Rif.jl


1
Дякую, але дивіться коментарі від самого lgautier вище. Це протилежний напрямок. Я хочу зателефонувати Джулії зсередини Р.
Арі Б. Фрідман

5
+1, оскільки в такій вузькій темі, як Юлія, кожна інформація є досить інформативною
Qbik

Як сказав @ AriB.Friedman, це не нова інформація - і всі ми хочемо зателефонувати Джулії з R, а не навпаки.
Мартін Махлер

13

Хтось бачив цей проект?

https://github.com/armgong/RJulia

Досить новий, але, здається, робить саме те, що вимагається!


4
Дякую за підказку. Дійсно, це було б рішенням, якби воно працювало. Я спробував встановити (використовуючи дуже поточний патч R 3.1.2) та julia (0.4.0-dev .. оновлено 30 грудня 2014 року як пакунок ubuntu). Тоді компіляція не вдалася, і я відкрив випуск github github.com/armgong/RJulia/isissue/10 Будемо сподіватися, що ми пройдемо далі… скоро
Мартін Махлер

1
Будь-який прогрес? Я отримую досить активні сповіщення про розробку від їхнього github repo, тому я думаю, що проблеми випрасовуються ...
Адам

2
Справді! Тут не зверталися - але на сторінці проблем вище: Основні проблеми були усунені. Я зголосився наблизити пакет до випуску (до CRAN), а саме додавши корисні довідкові сторінки. Але, на жаль, я занадто глибоко зайнятий іншими зайнятими справами, тож це зараз доводиться чекати (для мене).
Мартін Махлер

11

Я створюю пакет R під назвою JuliaCall нещодавно, який вбудовує Джулію в R. Пакет знаходиться на CRAN.

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

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

Використання пакету таке:

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)

Як бачите, ви могли надсилати командні рядки і викликати функції Julia дуже легко.

Також є кілька R-пакетів, які обгортають пакети Julia, використовуючи JuliaCall, наприклад,

  • convexjlr для дисциплінованого випуклого програмування в R за допомогою Convex.jl, який також є на CRAN.
  • ipoptjlr, інтерфейс R для OPTimizer інтер'єру точки (IPOPT) за допомогою пакету Julia Ipopt.jl.

Ласкаво просимо за будь-якими відгуками про JuliaCall!!


7

Існує також пакет XRJulia з сімейства пакетів пакетів XR, спрямованих на e X tend R від Джона Чемберса (одного з творців R). Він використовує дещо інший підхід (JSON) для передачі даних між Julia та R, а потім rJulia та подібними пакетами.


5

Ви також можете перевірити мою спробу: JuliaConnectoRR-пакет. Пакет доступний від GitHub та CRAN .

Його мета полягає в тому, щоб імпортувати функції з Julia безпосередньо в R таким чином, щоб вони могли використовуватися як R функції у коді R. Повернені значення функцій Julia переводяться в структури даних R, які можна використовувати в R, а також передавати назад до Julia. Для подальшої інтеграції Julia та R також можна передзвонити з Julia в R, передаючи R функції як функції зворотного виклику.

Подібно до XRJulia, JuliaConnectoR покладається на TCP, але він функціонально орієнтований та використовує оптимізований користувальницький формат потоку замість текстових повідомлень JSON, як це робить XRJulia. Однією з переваг спілкування через TCP є стабільність щодо різних версій Julia та R. Це набагато важче підтримувати при інтеграції на рівні інтерфейсів C, як це роблять RCall та JuliaCall.

Пакет працює з Julia ≥ 1.0 та широким асортиментом R-версій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.