参见:https://cloud.tencent.com/developer/article/1657000 https://zhuanlan.zhihu.com/p/164507492 https://rstudio.github.io/reticulate/index.html
虽然作为数据分析从业者,R 和python 二者择其一已足以闯天下。
但毕竟天下武功百般,有的时候你使用的工具,或者是你处理的对象使用其他编程语言处理的,你又该怎么办呢?
学习python,你可能使用过编辑器如pycharm, vs code 等等。
但如果你是一个R 的重度使用者,比如我,那我建议你直接用Rstudio 就好了~
杀鸡的第一步是什么呢?得有鸡吧。
所以,你得有个python 环境。
这里我建议使用conda 进行管理,非常方便。
而在R 中使用python,则需要安装R 包reticulate。
现在R studio 也已经支持直接修改的操作,我们可以在全局设置中选择运行的python 环境:
如果你像我一样,安装了conda,可以直接在上面的窗口中选择不同conda 环境下的python。
如果你还没有创建conda 环境,可以参考下面的使用conda 条目。通过conda 分离不同python 或其他程序版本,可以防止因为软件或包版本不同造成的污染。
其他详细内容参考:https://rstudio.github.io/reticulate/articles/python_packages.html#overview-1
这里我只介绍在R 中使用conda。
类似我们通常在shell 中的使用习惯,也非常方便。
毕竟作为一个跨平台,且集各种环境与软件于一身的工具,我们在日常中很难不去接触他。
先前我们提到过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")
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 的详细用法较为复杂。这里先挖个坑~
类似在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")
> 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