Связываешь Р и Джулию?

135

Джулия выглядит очень многообещающе для быстрых и синтаксических вычислений (например, здесь ), но я подозреваю, что это не будет где-то рядом с R с точки зрения общего рабочего процесса статистики в течение некоторого времени. Поэтому я хотел бы использовать его там, где C ++ в основном используется в программах на 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-to-R.
lgautier
4
У меня грубо работает мост Юлия-Р ( github.com/lgautier/Rif.jl ). Движение в обратном направлении зависит от незавершенной работы Джулии.
lgautier 29.12.12
3
@lgautier Я искренне надеюсь, что вам удастся возобновить работу. Черт, если бы была страница кикстартера, чтобы поддержать это, я бы обязательно был там.
Maxim.K

Ответы:

42

Пакет RJulia R теперь выглядит неплохо, поскольку R. R CMD checkзапускается без предупреждений или ошибок (если juliaон правильно установлен).

Самым большим TODO, на мой взгляд, является заставить Джулию возвращать именованные списки, которые составляют действительно базовую гибкую общую структуру данных в R.

Обратите внимание, что Даг Бейтс предупредил меня о том, что 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 ++, прежде чем мы войдем в промежуточный уровень [который кто-то должен будет написать], из которого мы передаем данные в Julia, точно так же, как фактический R API предлагает только уровень C. Не знаю.

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

Джулия вполне может туда добраться. Но на данный момент я подозреваю, что многие из нас выполнят работу в R и увидят всего несколько любопытных взглядов на Джулию.

Дирк Эддельбюттель
источник
1
поскольку, насколько мне известно, у julia нет планов иметь статический компилятор, позволяющий встраивание в C ++, нам, возможно, придется подождать некоторое время
pyCthon
48

План разработки Julia, как я описал в этом ответе, состоит в том, чтобы разрешить компиляцию кода Julia в разделяемые библиотеки, которые можно вызывать с помощью C ABI. Как только это произойдет, вызов кода Джулии из R будет так же легок, как и вызов кода C / C ++. Однако для того, чтобы это стало возможным, требуется достаточное количество работы.

StefanKarpinski
источник
4
Это звучит очень многообещающе. Я (и я думаю, что другие) видят Джулию как отличную замену тому, как в настоящее время используется Matlab - для результатов с большими вычислительными затратами, которые все еще требуют большей математической интуиции, чем C и подобные им возможности. Для этого R и Джулия могут быть удивительным дополнением. Даже если Джулия вытеснит R (и я бы с этим согласился), пройдет не менее десяти лет, прежде чем статистическая библиотека в Джулии станет настолько богатой, что в настоящее время возможности взаимодействия между R и Джулией могут помочь открыть статистические вычисления процветают.
Ари Б. Фридман
8
Изменилась ли эта ситуация с тех пор, как вы написали это? (PS Я люблю Джулию, спасибо за вашу работу над этим!)
Энди Хейден
23

Быстрое обновление. С тех пор, как был задан этот вопрос, было начало пакета Julia, который позволяет вызывать R-программы изнутри Julia.

Больше здесь: https://github.com/lgautier/Rif.jl

aviks
источник
1
Спасибо, но смотрите комментарии самого lgautier выше. Это противоположное направление. Я хочу позвонить Джулии изнутри R.
Ари Б. Фридман
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/issues/10 Будем надеяться, что мы продолжим ... скоро
Martin Mächler
1
Какой-либо прогресс? Я получаю довольно активные уведомления о разработке из их репозитория на github, так что я представляю, что проблемы решаются ...
Адам
2
На самом деле! Здесь не следили - но на странице вопросов выше: все основные проблемы были устранены. Я вызвался сделать пакет ближе к возможности его выпуска (для CRAN), а именно, добавив полезные страницы справки. Но, к сожалению, я слишком глубоко разбираюсь в других занятых делах, так что это должно подождать (для меня) сейчас.
Мартин Мехлер,
11

Я JuliaCallнедавно создал пакет R , который встраивает Джулию в 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)

Как видите, вы можете легко отправлять строки команд и вызывать функции Джулии.

И есть также некоторые R-пакеты, упаковывающие пакеты Julia с использованием JuliaCall, например,

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

Добро пожаловать за любые отзывы о JuliaCall!

консистенция
источник
7

Существует также пакет XRJulia из семейства пакетов XR, нацеленный на e X тенденцию R Джона Чамберса (одного из создателей R). Он использует немного другой подход (JSON) для передачи данных между Julia и R, затем rJulia и аналогичными пакетами.

В.Х.-д
источник
5

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

Его цель - импортировать функции из Julia непосредственно в R, чтобы их можно было использовать как R-функции в R-коде. Возвращаемые значения функций Julia переводятся в структуры данных R, которые можно использовать в R, а также передавать обратно в Julia. Для дальнейшей интеграции Джулии и R также возможно перезвонить из Джулии в R, передав функции R в качестве функций обратного вызова.

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

Пакет работает с Julia ≥ 1.0 и широким спектром версий R.

Esel
источник