同一个项目中让R和Python无缝工作的五种方法
最近,我同时使用R和Python进行了更多的项目。 对我而言,使用最佳工具来完成工作变得越来越重要,而不受单一语言的束缚。
- 作者:deephub来源:今日头条|2021-04-08 14:51
Python在某些方面做得最好,R在某些方面做得最好,因此,如果我们在需要的时候可以同时使用这两种方法,那么我们就可以发挥出最好的性能。 在最近的示例中,我想创建一个Shiny应用程序来生成参数化的Powerpoint文档,这个应用我是用R的tidyverse对我的数据进行编码处理,使用Python编写了Powerpoint编辑代码,因为这在python-pptx包中很容易。
现在,在RStudio IDE中使用两种语言进行操作确实非常容易。 为此,您需要在R中安装和加载网状软件包。您可以执行以下五项操作,以使您在同一项目中获得两种语言的无缝编码体验:
在项目启动时定义Python环境
为避免与使用错误的Python解释器相关问题,首先需要在项目启动时通过创建.Rprofile文件并将其保存在项目目录中来定义Python环境。 您的.Rprofile包含将在您的项目启动时执行的代码。 我通常在.Rprofile中有这两行代码:
- Sys.setenv(RETICULATE_PYTHON = "<path>")
- print(paste("Python environment forced to", Sys.getenv("RETICULATE_PYTHON")))
其中,是您要使用的Python环境中Python可执行文件的路径。 第一个命令将其设置为您的python可执行文件。 第二个命令将打印此确认,该确认将在您每次启动项目时显示在您的终端中。 这是我启动一个项目时终端的外观:

使用repl_python()在Python中实时编码
在项目中如果需要测试Python和R可以使用 Reticulate软件包中的repl_python()函数将R终端切换到Python终端,以便您可以在Python中进行实时编码。 您可以使用exit命令退出它,然后在R中编写更多代码,然后再回到Python终端,它仍然会记住上一个会话中的所有对象,这意味着它很容易在各种语言之间无缝地移动。 这是一个简单的示例:

在Python和R之间交换对象
可以在Python和R之间交换任何相当标准的数据对象,例如值,列表和dataframes 。要在Python中使用名为myrobject的R对象,可以使用r.myrobject进行调用。 要在R中使用名为mypythonobject的Python对象,可以使用py $ mypythonobject进行调用。 这是另一个实际的操作示例,其中我将R中的themtcars数据集引入了Python:

数据对象将根据不同的语言转换为它们的等效结构。 例如,R中的列表将被翻译成Python中的字典:

将Python函数转换为R函数
当同时使用这两种语言时,你最终会需要将Python代码作为一个R的函数来执行.如果将编写的Python函数写到一个文件中,然后R中调用source_python(),那么这个文件可以以源代码文件的形式使用。下面是一个简单的例子,我写了一个Python函数将两个数字相加,并将其保存在文件sumof.py中:
- def sumof(a, b):
- return a+b
现在,我可以获取sumof.py并将其变成和R函数:

创建包含R和Python代码的MD文档
正确设置.Rprofile后,您可以创建具有两种语言代码块的文档,并且可以在代码块之间交换对象。 以下是一些简单的R Markdown代码,用以说明这一点:

这会产生以下输出:

同样,你可以用一种语言编写函数,在另一种语言中轻松使用它们:

对我来说,这个功能让我的工作中有了更多的可能。我希望这些技巧能够帮助您开始探索Python和R所提供的最佳功能。
【编辑推荐】
点赞 0
- 大家都在看
- 猜你喜欢
编辑推荐
- 24H热文
- 一周话题
- 本月获赞
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!架构师的选择,Pulsar还是Kafka?图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)为写论文向Linux提交「恶意代码」,结果整个大学都被Linux封了软件工程师完整的代码质量指南6种微服务RPC框架,你知道几个?终于有人把Elasticsearch原理讲透了!
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!花了一个星期,我终于把RPC框架整明白了!图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)开发 | 再见了,公司的“烂系统”6种微服务RPC框架,你知道几个?架构师的选择,Pulsar还是Kafka?Java对象为啥要实现Serializable接口?终于有人把Elasticsearch原理讲透了!
- 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!坐在马桶上看算法:快速排序花了一个星期,我终于把RPC框架整明白了!6种微服务RPC框架,你知道几个?图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)Java对象为啥要实现Serializable接口?五大自动化测试的Python框架架构师的选择,Pulsar还是Kafka?
订阅专栏+更多
-
数据湖与数据仓库的分析实践攻略
助力现代化数据管理:数据湖与数据仓库的分析实践攻略共3章 | 创世达人7人订阅学习
-
云原生架构实践
新技术引领移动互联网进入急速赛道共3章 | KaliArch37人订阅学习
-
数据中心和VPDN网络建设案例
漫画+案例共20章 | 捷哥CCIE230人订阅学习
视频课程+更多
-
ClickHouse数据库培训实战 (PB级大数据分析
讲师:风哥3761人学习过
-
OGG(GoldenGate)管理与实战
讲师:白丁835人学习过
-
Linux运维+云计算实战班(Linux云计算、K8S、
讲师:IT学院13926人学习过
专题推荐+更多
-
订阅51CTO邮刊
点击这里查看样刊

51CTO服务号

51CTO官微