当前位置: 首页 > 科技观察

让R和Python在同一个项目中无缝工作的五种方法

时间:2023-03-18 18:10:05 科技观察

Python在某些事情上做得最好,而R在某些事情上做得最好,所以如果我们能同时使用这两种方法,那么我们就能发挥最好的性能。在最近的一个示例中,我想创建一个Shiny应用程序来生成参数化Powerpoint文档。对于这个应用程序,我使用R的tidyverse来编码我的数据。我用Python编写了Powerpoint编辑代码,因为这是在python-pptx包中很容易。现在在RStudioIDE中使用两种语言真的很容易。为此,您需要在R中安装和加载reticulate包。这里有五件事可以让您在同一项目中获得两种语言的无缝编码体验:在项目启动时定义您的Python环境以避免相关问题要使用错误的Python解释器,首先需要通过创建.Rprofile文件并将其保存在项目目录中来定义Python环境。您的.Rprofile包含项目启动时将执行的代码。我的.Rprofile中通常有这两行:Sys.setenv(RETICULATE_PYTHON="")print(paste("Pythonenvironmentforcedto",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之间交换。要在Python中使用名为myrobject的R对象,请使用r.myrobject调用它。要在R中使用名为mypythonobject的Python对象,可以使用py$mypythonobject调用它。这是我将R中的themtcars数据集引入Python的另一个实践示例:数据对象根据语言转换为它们的等效结构。例如,R中的列表将被翻译成Python中的字典:ConvertingaPythonfunctiontoanRfunction当同时使用这两种语言时,您最终需要将Python代码作为R函数来执行。如果你将把Python函数写到一个文件中,然后在R中调用source_python(),那么这个文件就可以作为源代码文件了。这是一个简单的示例,我编写了一个Python函数,将两个数字相加并将其保存在文件sumof.py中:defsumof(a,b):returna+b现在,我可以使用sumof.py并将其转换为R函数:创建包含R和Python代码的MD文档正确设置.Rprofile后,您可以创建包含两种语言代码块的文档,并且可以在代码块之间交换对象。下面是一些简单的RMarkdown代码来说明这一点:这会产生以下输出:同样,您可以用一种语言编写函数并在另一种语言中轻松使用它们:对我来说,这个特性使我的工作有更多的可能性。我希望这些技巧可以帮助您开始探索Python和R所提供的最佳功能。