reticulate: R interface to Python

作者: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数据框:

image

注释:加载安装reticulate时,默认情况下都会在R Markdown中启用Python引擎

3. 加载Python模块

可以使用函数:import() 导入任何Python模块并从R中调用它。例如,此代码导入Python os模块并调用函数:listdir()

library(reticulate)

os <- import("os")

os$listdir(".")

image.gif

可以通过$运算符访问Python模块和类中的函数和其他数据(类似于与R列表,环境或引用类进行交互的方式)

image.gif

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中进行调用。 例如:

image

在Python REPL中输入exit以返回到R提示符。同时,Python代码还可以使用r对象访问R会话中的对象(例如r.flights)

6. 类型转换

当调用Python时,R数据类型会自动转换为它们等效的Python类型。 当值从Python返回到R时,它们会被转换回R类型。 类型转换如下:

image

如果返回自定义类的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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 清晨5点,开始在寺里练功,养生功,肩颈杂揉着练,眼看着天色泛白,变亮,6点钟早饭。白天有时间就活动下肩颈,这两天又酸了。
    misang阅读 52评论 0 1
  • 【有图有真相】你们知道胃病、胃癌吗?罪魁祸首就是这个幽门螺旋杆菌!它平时会存在胃里、然后通过呼气的方式可以被其他人...
    环保达人文欣阅读 455评论 0 0
  • 今天在《奇葩说》里看到的辩题是如果你是剩男剩女,你该不该将就?很欣慰我在对的时间点,对的阶段,遇见那个对的人。...
    曼路_阅读 436评论 1 1
  • 1.晨起 充分利用早晨无干扰的时间,进行写作,冥想阅读 2.去掉无谓的闲聊 不要扯那么多东西,完成任务为要...
    心闲散人阅读 401评论 0 0