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

В последнее время я обнаружил, что выполняю больше проектов, используя одновременно R и Python. Для меня стало более важным использовать лучшие инструменты для работы и не ограничиваться одним языком. Есть вещи, которые Python делает лучше всего, а есть вещи, которые R делает лучше всего, поэтому, если мы можем использовать и то, и другое, когда нам нужно, мы сможем сделать все, что в наших силах. В недавнем примере я хотел создать приложение Shiny для создания параметризованных документов Powerpoint и хотел закодировать обработку данных в R, чтобы воспользоваться преимуществами tidyverse, но использовал Python для кодирования редактирования Powerpoint, что было легко в пакете python-pptx.

В RStudio IDE теперь действительно легко работать на обоих языках. Чтобы это работало, вам необходимо установить и загрузить пакет reticulate в R. Вот пять вещей, которые вы можете сделать, которые позволят вам беспрепятственно кодировать на обоих языках в одном проекте:

1. Определите среду Python при запуске проекта.

Чтобы избежать проблем, связанных с использованием неправильного интерпретатора Python, вы можете определить среду Python при запуске проекта, создав файл .Rprofile и сохранив его в каталоге проекта. Ваш .Rprofile содержит код, который будет выполняться при каждом запуске вашего проекта. Обычно у меня в .Rprofile есть эти две строки кода:

Sys.setenv(RETICULATE_PYTHON = "<path>")
print(paste("Python environment forced to", Sys.getenv("RETICULATE_PYTHON")))

где <path> - это путь к исполняемому файлу Python в среде Python, которую вы хотите использовать. Первая команда устанавливает его как исполняемый файл Python. Вторая команда печатает подтверждение этого, которое будет отображаться в вашем терминале каждый раз, когда вы запускаете свой проект. Вот как выглядит мой терминал, когда я запускаю один из своих проектов:

2. Используйте repl_python() для написания кода в реальном времени на Python

Вам нужно будет протестировать свой код Python, а также код R при создании проекта. Функция repl_python() в пакете reticulate переключает ваш терминал R на терминал Python, чтобы вы могли писать код прямо на Python. Вы можете выйти из этого с помощью команды exit, затем закодировать еще немного на R, а затем, если вы вернетесь в свой терминал Python, он все равно запомнит все объекты из последнего сеанса, что означает, что его легко легко перемещать между языками. Вот простой пример:

3. Обмен объектами между Python и R

Между Python и R можно обмениваться любыми достаточно стандартными объектами данных, такими как значения, списки и фреймы данных. Чтобы использовать объект R с именем my_r_object в Python, вы вызываете его с помощью r.my_r_object. Чтобы использовать объект Python с именем my_python_object в R, вы можете вызвать его с помощью py$my_python_object. Вот еще один пример этого в действии, когда я переношу набор данных themtcars из R в Python:

Объекты данных будут переведены в их эквивалентные структуры на разных языках. Например, список в R будет переведен в dict в Python:

4. Превратите функции Python в функции R

Когда вы используете эти два языка вместе, вам в конечном итоге потребуется выполнить код Python как функцию в R. Если вы записываете свою функцию Python в файл, а затем отправляете этот файл в R с помощью source_python(), ваша функция Python становится функцией R. для использования по мере необходимости. Вот простой пример, в котором я пишу функцию Python для сложения двух чисел и сохранения их в файле sumof.py:

def sumof(a, b):
  return a+b

Теперь я могу исходить sumof.py, и он становится функцией R:

5. Напишите документы R Markdown, которые перемещаются между R и Python.

Правильно настроив .Rprofile, вы можете создавать документы с фрагментами кода на двух языках и обмениваться объектами между фрагментами кода. Вот простой код R Markdown, который демонстрирует это:

Это дает следующий результат:

Таким же образом вы можете писать функции на одном языке и легко использовать их на другом:

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

Изначально я был чистым математиком, затем стал психометриком и специалистом по анализу данных. Я с энтузиазмом отношусь к применению всех этих дисциплин к сложным человеческим вопросам. Я также помешан на кодировании и большой поклонник японских ролевых игр. Найдите меня в LinkedIn или Twitter. Также посетите мой блог на drkeithmcnulty.com.