參見:https://cloud.tencent.com/developer/article/1657000https://zhuanlan.zhihu.com/p/164507492https://rstudio.github.io/reticulate/index.html
雖然作為數據分析從業者,R 和python 二者擇其一已足以闖天下。
但畢竟天下武功百般,有的時候你使用的工具,或者是你處理的對象使用其他程式語言處理的,你又該怎麼辦呢?
學習python,你可能使用過編輯器如pycharm, vs code 等等。
但如果你是一個R 的重度使用者,比如我,那我建議你直接用Rstudio 就好了~
0. 準備工作殺雞的第一步是什麼呢?得有雞吧。
所以,你得有個python 環境。
這裡我建議使用conda 進行管理,非常方便。
而在R 中使用python,則需要安裝R 包reticulate。
現在R studio 也已經支持直接修改的操作,我們可以在全局設置中選擇運行的python 環境:
如果你像我一樣,安裝了conda,可以直接在上面的窗口中選擇不同conda 環境下的python。
如果你還沒有創建conda 環境,可以參考下面的使用conda 條目。通過conda 分離不同python 或其他程序版本,可以防止因為軟體或包版本不同造成的汙染。
1. 安裝python 的包其他詳細內容參考:https://rstudio.github.io/reticulate/articles/python_packages.html#overview-1
這裡我只介紹在R 中使用conda。
類似我們通常在shell 中的使用習慣,也非常方便。
使用conda畢竟作為一個跨平臺,且集各種環境與軟體於一身的工具,我們在日常中很難不去接觸他。
先前我們提到過conda 的使用,而現在,可以直接以R 代碼的形式進行管理。
不過需要注意的是,這裡的conda 命令,更多的還是為了方便的控制python。
常用命令如下:
conda_list() List all available conda environments
conda_create() Create a new conda environment
conda_install() Install a package within a conda environment
conda_remove() Remove individual packages or an entire conda environment
use_condaenv() use specific conda env此外,如果你沒有conda,還可以使用該包命令miniconda:
# 安裝miniconda環境
install_miniconda()
# 顯示miniconda安裝地址
miniconda_path()
# 更新miniconda環境
miniconda_update()接下來就可以在R 中使用conda 安裝包了:
conda_create("r-reticulate")
conda_install("r-reticulate", "scipy")當然我們也可以直接在所在的python 環境內直接安裝:
py_install("pandas")
1. 直接在R 中運行python 模塊與函數reticulate 包非常牛X 的一點是,它允許我們使用R 風格的代碼來運行python。
我們只需要將模塊導入並制定一個變量,就可以使用$ 符號調用它的模塊。
比如說:
library(reticulate)
os <- import("os")
os$listdir(".")
[1] ".git" ".gitignore" ".Rbuildignore" ".RData"
[5] ".Rhistory" ".Rproj.user" ".travis.yml" "appveyor.yml"
[9] "DESCRIPTION" "docs" "external" "index.html"
[13] "index.Rmd" "inst" "issues" "LICENSE"
[17] "man" "NAMESPACE" "NEWS.md" "pkgdown"
[21] "R" "README.md" "reticulate.Rproj" "src"
[25] "tests" "vignettes"牛的是,還會顯示幫助文檔:稍微有些差強人意的就是,並不能提示函數參數的使用。
另外,我們在python 中執行的這些操作,都會被保存在py 對象中。
> py$a
[1] 3
> pryr::otype(py)
[1] "S3"關於R 中運行python 的詳細用法較為複雜。這裡先挖個坑~
2. 創建python 腳本運行類似在R 中,我們通過source 運行R 腳本。reticulate 包提供了source_python() 函數,可以讓我們加載python 中的函數。
首先是定義python 腳本:
import pandas
def read_flights(file):
flights = pandas.read_csv(file)
flights = flights[flights['dest'] == "ORD"]
flights = flights[['carrier', 'dep_delay', 'arr_delay']]
flights = flights.dropna()
return flights接下來可以在R 中直接使用:
source_python("flights.py")
flights <- read_flights("flights.csv")
3. 直接進入python 交互> repl_python()
Python 3.8.3 (/Users/appe/opt/anaconda3/bin/python)
Reticulate 1.20 REPL -- A Python interpreter in R.
>>> a = 3
>>> b = 4
>>> a,b = b,a
>>> a
4
>>> b
3