reticulate: R interface to Python

reticulate: R interface to Python

來自專欄 R語言中文社區

作者:JJ Allaire

翻譯:黃小偉,先後從事遊戲、社交及金融數據研究及應用相關工作,目前就職網易杭州

一. 基礎介紹

CRAN已於2018年3月21日收錄reticulat包(1.6版本),它包含了用於Python和R之間協同操作的全套工具,在R和Rstudio中均可使用。主要包括:

1)在R中支持多種方式調用Python。包括R Markdown、載入Python腳本、導入Python模塊以及在R會話中互動式地使用Python。

2)實現R和Python對象之間的轉換(例如R和Python數據框、R矩陣與NumPy數組之間)。

3)靈活綁定到不同版本的Python,包括虛擬環境和Conda環境。

在R會話中嵌入了Python會話,從而實現了無縫的、高性能的互操作性。如果你是使用Python進行某些工作的R開發人員或使用兩種語言的數據科學團隊的成員,那麼reticulate包可以極大地簡化你的工作流程!

二. 操作說明

1. reticulate包安裝

install.packages("reticulate")

library("reticulate")

2. R Markdown中應用Python

reticulate包含一個用於R Markdown的Python引擎,具有以下功能:

1)可在R會話中嵌入的單個Python會話中,運行Python塊。同時Python塊之間的共享變數/狀態。

2)可列印Python輸出,包括matplotlib的圖形輸出。

3)可使用py對象訪問R中Python塊中創建的對象。

4)使用r對象從Python中訪問在R塊中創建的對象。

同時,內置了許多用於Python對象類型轉換的方法,包括NumPy數組和Pandas數據框。 例如,你可以使用Pandas讀取和操作數據,然後使用ggplot2輕鬆繪製Pandas數據框:

注釋:載入安裝reticulate時,默認情況下都會在R Markdown中啟用Python引擎

3. 載入Python模塊

可以使用函數:import() 導入任何Python模塊並從R中調用它。例如,此代碼導入Python os模塊並調用函數:listdir()

library(reticulate)

os <- import("os")

os$listdir(".")

可以通過$運算符訪問Python模塊和類中的函數和其他數據(類似於與R列表,環境或引用類進行交互的方式)

4. 載入Python腳本

可以使用函數:source_python()獲取任何Python腳本,就像使用R腳本一樣。如果你有以下Python腳本:flights.py

import pandas

def read_flights(file):

flights = pandas.read_csv("flights.csv")

flights = flights[flights[dest] == "ORD"]

flights = flights[[carrier, dep_delay, arr_delay]]

flights = flights.dropna()

return flights

然後,你可以編寫腳本源代碼並按如下所示調用函數:read_flights()

source_python("flights.py")

flights <- read_flights("flights.csv")

library(ggplot2)

ggplot(flights, aes(carrier, arr_delay)) + geom_point() + geom_jitter()

5. Python REPL

如果你想以交互方式使用Python,則可以調用函數:repl_python(),該函數提供了嵌入在R會話中的Python REPL。 在Python REPL中創建的對象,可以通過reticulate導出py對象,並在R中進行調用。 例如:

Python REPL中輸入exit以返回到R提示符。同時,Python代碼還可以使用r對象訪問R會話中的對象(例如r.flights)

6. 類型轉換

當調用Python時,R數據類型會自動轉換為它們等效的Python類型。 當值從Python返回到R時,它們會被轉換回R類型。 類型轉換如下:

如果返回自定義類的Python對象,則返回該對象的R引用。

7. 更多學習

reticulate網站(rstudio.github.io/retic) 包括了使用該軟體包的詳細文檔,主要包括:

1)Calling Python from R : 介紹從R訪問Python對象的各種方法以及可用於更高級的交互和轉換行為的函數。

2)R Markdown Python Engine : 提供有關在R Markdown文檔中使用Python塊的詳細信息,包括如何從R塊調用Python代碼,反之亦然。

3)Python Version Configuration Python版本配置 : 描述用於確定R會話中使用哪個版本的Python的工具。

4)Installing Python Packages : 有關從PyPI或Conda安裝Python軟體包的文檔,以及使用virtualenvs和Conda環境管理軟體包安裝的文檔。

5)Using reticulate in an R Package : 在R軟體包中使用reticulate的準則和最佳實踐。

6)Arrays in R and Python : 深層次討論R和Python中數組之間的差異以及對轉換和互操作性的影響。

參考資料:

1.reticulate網站: rstudio.github.io/retic

2.源碼學習: github.com/rstudio/reti

3.問題反饋: github.com/rstudio/reti

往期精彩內容整理合集

2017年R語言發展報告(國內)

R語言中文社區歷史文章整理(作者篇)

R語言中文社區歷史文章整理(類型篇)

推薦閱讀:

TAG:R編程語言 | Python | 數據分析 |