R и Python в одном блокноте Jupyter

Можно ли запускать код R и Python в одной записной книжке Jupyter. Какие есть все альтернативы?

  1. Установите r-essentials и создайте записные книжки R в Jupyter.
  2. Установите rpy2 и используйте функции rmagic.
  3. Используйте блокнот для лабораторных стаканов.

Какой из трех вариантов надежен для запуска фрагментов кода Python и R (совместное использование переменных и визуализаций) или уже есть лучший вариант?


person Sailendra Pinupolu    schedule 18.08.2016    source источник


Ответы (4)


Да, это возможно! Используйте rpy2.

Вы можете установить rpy2 с помощью: pip install rpy2

Затем запустите %load_ext rpy2.ipython в одной из ваших ячеек. (Вам нужно запустить это только один раз.)

Теперь вы можете сделать следующее:

Ячейка Python:

# enables the %%R magic, not necessary if you've already done this
%load_ext rpy2.ipython

import pandas as pd
df = pd.DataFrame({
    'cups_of_coffee': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    'productivity': [2, 5, 6, 8, 9, 8, 0, 1, 0, -1]
})

Ячейка R:

%%R -i df -w 5 -h 5 --units in -r 200
# import df from global environment
# make default figure size 5 by 5 inches with 200 dpi resolution

install.packages("ggplot2", repos='http://cran.us.r-project.org', quiet=TRUE)
library(ggplot2)
ggplot(df, aes(x=cups_of_coffee, y=productivity)) + geom_line()

И вы получите свою красивую фигуру, отображающую данные из Python Pandas DataFrame.

person uut    schedule 27.01.2017
comment
Когда я пытаюсь это сделать, я получаю сообщение об ошибке: Ошибка в библиотеке (ggplot2): нет пакета с именем «ggplot2». - person Travasaurus; 30.10.2019
comment
Это великолепно! Пожалуйста, купи себе чашку кофе - на меня. - person WestCoastProjects; 07.08.2020

Используя ответ @ uut для запуска R в записной книжке jupyter в ядре Python (в MacOS), у меня сработало следующее.

%%R всегда должен быть в начале ячейки, иначе вы получите ошибку, как показано на рисунке ниже синтаксическая ошибка, если %% R не находится в верхней части ячейки

Следующее - правильный путь:  Правильный способ вызова R в ядре Python

Также %load_ext rpy2.ipython должен стоять перед %%R, поэтому поместите его в другую ячейку над ним, как показано на рисунках.

person Abhimanu Kumar    schedule 17.01.2018

ОБНОВЛЕНИЕ апрель 2018 г.,

RStudio также выпустила пакет: https://blog.rstudio.com/2018/03/26/reticulate-r-interface-to-python/

для которого можно запускать несколько фрагментов кода на разных языках с помощью записной книжки R markdown, которая похожа на записную книжку jupyter.

В моем предыдущем посте я сказал, что базовое представление объектов другое. На самом деле, вот более подробное обсуждение базового матричного представления R и python из одного и того же пакета: https://rstudio.github.io/reticulate/articles/arrays.html

Старый пост:

Вам будет сложно использовать синтаксис R и Python в одной записной книжке, в основном потому, что базовое представление объектов на двух языках различается. Тем не менее, есть проект, который пытается разрешить преобразование объектов и разных языков в одной записной книжке: http://beakernotebook.com/features

Сам не использовал, но выглядит многообещающе

person Allen Wang    schedule 18.08.2016

Ядро SoS - еще один вариант.

Пока не знаю, насколько хорошо он работает, просто начал его использовать.

Ядро SoS позволяет запускать в одной записной книжке разные языки, включая Python и R.

Блокнот SoS Polyglot - инструкции по установке требуемых языков

Вот пример записной книжки с Python и R-ячейками.


*Обновлять:

Что касается разделения переменных, можно использовать магию %use и %with. "SoS автоматически разделяет переменные с именами, начинающимися с sos, между всеми подъядрами" 1.

Ex.

Начальная ячейка в R:

%use R
sos_var=read.csv('G:\\Somefile.csv')
dim(sos_var)

Вывод:

51  13

Переход на питон:

%with Python3
sos_var.shape

Вывод:

(51, 13)
person rm1104    schedule 22.08.2018
comment
sos выглядит неплохо, но в настоящее время практическое использование для разработчика выглядит ограниченным. Например. если вы делаете %get jl --from julia-1.0 print( jl ) - ›Подъядро julia-1.0 не поддерживает magic% put. Если вы используете conda, вам нужно было объединить Python и R в одной среде. - person InLaw; 02.09.2018