Как да стартирам Python в R

Колкото и да обичам R, ясно е, че Python също е чудесен език - както за наука за данни, така и за изчисления с общо предназначение. И може да има основателни причини R потребител да иска да направи някои неща в Python. Може би това е страхотна библиотека, която няма R еквивалент (все още). Или API, който искате да получите, който има примерен код в Python, но не и R.

Благодарение на пакета R reticulate, можете да стартирате Python код точно в R скрипт - и да предавате данни напред-назад между Python и R.

В допълнение към ретикулирането ви е необходим Python, инсталиран на вашата система. Също така се нуждаете от всякакви модули, пакети и файлове на Python, от които зависи вашият код на Python.

Ако искате да продължите, инсталирайте и заредете мрежата с  install.packages("reticulate")и library(reticulate).

За да улесним нещата, нека започнем само с два реда Python код, за да импортираме пакета NumPy за основни научни изчисления и да създадем масив от четири числа. Кодът на Python изглежда така:

импортиране на numpy като np

my_python_array = np.array ([2,4,6,8])

И ето един начин да направите това правилно в R скрипт:

py_run_string ("импортиране на numpy като np")

py_run_string ("my_python_array = np.array ([2,4,6,8])")

На py_run_string()изпълнява функцията каквото и Python код е в рамките на скобите и кавичките. 

Ако стартирате този код в R, може да изглежда, че нищо не се е случило. Нищо не се показва в екрана на вашата среда на RStudio и не се връща стойност. Ако стартирате print(my_python_array)в R, получавате грешка, която my_python_arrayне съществува.

Но ако изпълните  команда за печат на  Python във py_run_string()функцията като 

py_run_string ("за елемент в my_python_array: print (item)")

трябва да видите резултат. 

Въпреки това, ще получите досадно изпълнение на код на Python ред по ред, ако имате повече от няколко реда код. Така че има няколко други начина да стартирате Python в R и да ретикулирате.

Единият е да поставите целия код на Python в обикновен .py файл и да използвате py_run_file()функцията. Друг начин, който ми харесва, е да използвам документ R Markdown. 

R Markdown ви позволява да комбинирате текст, код, резултати от кодове и визуализации в един документ. Можете да създадете нов документ R Markdown в RStudio, като изберете File> New File> R Markdown.

Парчетата кодове започват с три обратни отметки ( ```) и завършват с три обратни връзки и имат сив фон по подразбиране в RStudio.

Това първо парче е за R код - можете да видите, че с rотварящата скоба. Той зарежда мрежовия пакет и след това посочвате версията на Python, която искате да използвате. (Ако не посочите, ще използва системата по подразбиране.)

```{r setup, include=FALSE, echo=TRUE}

library(reticulate)

use_python("/usr/bin/python")

```

Това второ парче по-долу е за Python код. Можете да въведете Python, както бихте го направили във файл на Python. Кодът по-долу импортира NumPy, създава масив и отпечатва масива.

„„ {python}

импортиране на numpy като np

my_python_array = np.array ([2,4,6,8])

за елемент в my_python_array:

печат (артикул)

„„

Ето готината част: Можете да използвате този масив в R, като го посочите като py$my_python_array(като цяло, py$objectname).

В това следващо парче код съхранявам този масив Python в R променлива, наречена my_r_array. И тогава проверявам класа на този масив.

„„ {r}

my_r_array <- py $ my_python_array

клас (my_r_array)

Това е клас „масив“, което не е точно това, което бихте очаквали за R обект като този. Но мога да го превърна в обикновен вектор с as.vector(my_r_array)и да изпълнявам каквито и да е R операции, които искам, като умножавам всеки елемент по 2. 

„„ {r}

my_r_vector <- as.vector (py $ my_python_array)

клас (my_r_vector)

my_r_vector <- my_r_vector * 2

„„

Следваща страхотна част: Мога да използвам тази R променлива обратно в Python, като r.my_r_array(по-общо казано r.variablename), като 

„„ {python}

my_python_array2 = r.my_r_vector

печат (my_python_array2)

„„

Ако искате да видите как изглежда това, без да настройвате Python във вашата система, вижте видеоклипа в горната част на тази история.