Краткое знакомство с пакетами Julia's PyCall и RCall

Большой! Итак, вы рискуете окунуться в многообещающий мир Джулии, но все еще хотите получить доступ к своим знакомым друзьям Python и R. Хотя преимущества Julia лучше всего реализовать, работая исключительно в Julia, обнадеживает то, что есть несколько способов интеграции ваши навыки Python или R в рабочий процесс во время поездки.

И Python, и R могут быть вызваны в Julia с помощью пакетов PyCall или RCall. Самый простой способ увидеть эти пакеты в действии - использовать соответствующие подходы к преобразованию строк Python или R в операции и функции, доступные для Julia. Для тех, кто знаком с Python, это похоже на использование eval для однострочного / однострочного кода или exec для многострочного / многовыраженного кода.

PyCall Привет, мир

Чтобы начать с Python, мы рассмотрим PyCall, запустив в Julia REPL следующую команду:

Обратите внимание, что вывод относится к типу Julia (в данном случае String).

RCall Привет, мир

Вот такая же демонстрация с использованием RCall:

RCall выводит в виде RObjects, который можно легко преобразовать в типы Julia с помощью метода rcopy:

Вы можете передавать переменные, объявленные в Julia, непосредственно в код Python или R с помощью простого синтаксиса. Например:

Загрузка локальных модулей Python

Одним из практических вариантов использования возможности взаимодействия является использование любых разработанных вами пользовательских утилит Python и их применение в Julia. Для очень упрощенной демонстрации давайте создадим модуль Python, который хранит нашу функцию hello_world, а затем вызовем его из Джулии с помощью PyCall.

Сначала создайте ниже пример модуля с именем mymodule. Из терминала запустите:

Затем вы можете импортировать и вызывать mymodule.hello_world из вашего Julia REPL. Есть несколько способов сделать это. Первый аналогичен тому, что мы сделали выше:

Второй и, вероятно, более применимый подход использует функцию PyCall pyimport для прямого импорта вашего модуля Python:

Загрузка пакетов Python и R

Вы также можете использовать внешние пакеты Python и R. Приведенный ниже код загружает набор данных о жилье в Бостоне scikit-learn и генерирует визуальный элемент с помощью matplotlib внутри Julia REPL:

А если вы предпочитаете строить график с помощью пакета R ggplot2, вы можете использовать макрос @rlibrary RCall:

Заключение

Вот и все. И PyCall, и RCall имеют гораздо более широкую функциональность для поддержки взаимодействия с Julia, чем показано здесь. Приятно видеть эти усилия по облегчению языковой совместимости и снижению барьеров для входа.

По мере того, как экосистема пакетов Джулии продолжает расти, может возникнуть небольшая потребность в использовании инструментов с внешних языков, но, тем не менее, это удобная ступенька для начала работы.

Ознакомьтесь с документацией PyCall и RCall, ссылки на которую приведены ниже, для более глубокого погружения.

Спасибо за прочтение!

Ресурсы