כיצד להריץ פייתון ב- R

ככל שאני אוהב את R, ברור שפייתון היא גם שפה נהדרת - הן למדעי נתונים והן למחשוב למטרות כלליות. ויכולות להיות סיבות טובות שמשתמש R ירצה לעשות כמה דברים בפייתון. אולי זו ספריה נהדרת שאין לה עדיין מקבילה R. או ממשק API שאליו ברצונך לגשת שיש קוד לדוגמא בפייתון אך לא R.

הודות לחבילת R reticulate, אתה יכול להריץ קוד פייתון ישירות בתוך סקריפט R - ולהעביר נתונים קדימה ואחורה בין Python ו- R.

בנוסף לרשת, אתה צריך להתקין Python במערכת שלך. אתה צריך גם כל מודולים, חבילות וקבצים של Python שקוד ה- Python שלך תלוי בהם.

אם ברצונך לעקוב, התקן וטען רשתית עם  install.packages("reticulate")ו- library(reticulate).

כדי לפשט את העניין, נתחיל משתי שורות קוד של פייתון בלבד כדי לייבא את חבילת 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()עוסק בביצוע הפונקציה מה קוד פייתון הוא בתוך הסוגריים במרכאות. 

אם אתה מריץ את הקוד ב- R, זה עשוי להיראות כאילו שום דבר לא קרה. שום דבר לא מופיע בחלונית הסביבה RStudio שלך, ושום ערך לא מוחזר. אם אתה פועל print(my_python_array)ב- R, אתה מקבל שגיאה my_python_arrayשאינה קיימת.

אבל אם אתה מפעיל   פקודת הדפסה של Python בתוך py_run_string()הפונקציה כגון 

py_run_string ("לפריט במערך mypython: הדפס (פריט)")

אתה אמור לראות תוצאה. 

זה יהיה מרגיז בהפעלת קוד פייתון שורה אחר שורה ככה, אם יש לך יותר מכמה שורות קוד. אז יש עוד כמה דרכים להפעיל את Python ב- R ולחזור לרשת.

האחת היא לשים את כל קוד הפיתון בקובץ .py רגיל ולהשתמש py_run_file()בפונקציה. דרך נוספת שאני אוהב היא להשתמש במסמך R Markdown. 

R Markdown מאפשר לך לשלב טקסט, קוד, תוצאות קוד והדמיות במסמך יחיד. באפשרותך ליצור מסמך R Markdown חדש ב- RStudio על ידי בחירת קובץ> קובץ חדש> R Markdown.

נתחי קוד מתחילים בשלושה backticks ( ```) ומסתיימים בשלושה backticks, ויש להם רקע אפור כברירת מחדל ב- RStudio.

הנתח הראשון הזה מיועד לקוד R - אתה יכול לראות את זה עם rסוגר הפתיחה שאחרי. הוא טוען את חבילת הרשתית ואז אתה מציין את גרסת ה- Python שבה ברצונך להשתמש. (אם לא תציין, היא תשתמש בברירת המחדל של המערכת שלך).

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

library(reticulate)

use_python("/usr/bin/python")

```

נתח שני זה למטה מיועד לקוד פייתון. אתה יכול להקליד את פייתון כמו שקורה בקובץ פייתון. הקוד שלמטה מייבא את NumPy, יוצר מערך ומדפיס את המערך.

"" {python}

ייבא קהה כ- np

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

לפריט ב- my_python_array:

הדפס (פריט)

""

הנה החלק המגניב: אתה יכול להשתמש במערך זה ב- R על ידי התייחסות אליו כאל py$my_python_array(באופן כללי, py$objectname).

בגוש הקוד הבא, אני שומר את מערך הפיתון הזה במשתנה 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)

class (my_r_vector)

my_r_vector <- my_r_vector * 2

""

החלק המגניב הבא: אני יכול להשתמש במשתנה R זה בחזרה בפייתון, כמו r.my_r_array(באופן כללי יותר r.variablename), כגון 

"" {python}

my_python_array2 = r.my_r_vector

הדפס (my_python_array2)

""

אם תרצה לראות איך זה נראה בלי להגדיר את Python במערכת שלך, עיין בסרטון בראש הסיפור הזה.