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網站(https://rstudio.github.io/reticulate/) 包括了使用該軟體包的詳細文檔,主要包括:
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網站: https://rstudio.github.io/reticulate/
2.源碼學習: https://github.com/rstudio/reticulate
3.問題反饋: https://github.com/rstudio/reticulate/issues
往期精彩內容整理合集
2017年R語言發展報告(國內)
R語言中文社區歷史文章整理(作者篇)
R語言中文社區歷史文章整理(類型篇)
推薦閱讀: