zl程序教程

您现在的位置是:首页 >  Python

当前栏目

31. R studio/R 工具指南(十四:在Rstudio中使用python和conda)

2023-04-18 14:58:22 时间

参见: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 就好了~

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