2017-08-09 124 views
1

我知道这两种语言(R/Python)都有多个库可以从另一个语言中调用模块。我正在寻找一种方法来让我的代码后端运行在python中,主要是因为.pyc和速度,还有前端运行在R中,所以我可以有一个Shiny应用程序。我找不到为后端制作python机器的方法。如果有人知道如何在R/Rstudio中做到这一点,请回复。从R运行Python

+1

这个问题看起来相当广泛。 Python应该运行什么?如果你想要一个web应用程序项目,你可以使用像Django(Python)的东西,并将R Shiny应用程序作为一个Web应用程序。但是,请再次解释你到底想要做什么。 – Jon

+0

你可能想看看'rPython' –

回答

-1

我相信你在找什么是下面的代码。它将运行R. Python脚本

system('python3 file_name.py') 
+0

这是否解决了“后端”问题?从OP的问题来看,似乎有一些需要在Python中运行的后台活动(例如服务器),并且只有一个Web应用程序需要在R中运行。您的解决方案适用于脚本,但是如果需要更多交互式这个解决方案会遇到一些问题。 – Jon

+0

感谢您的回复。使用system()是不够的,因为你实际上不能通过任何参数,你可以简单地运行一个脚本。如果您还有其他意识到的方式,请告诉我。 –

0

我没有关于它的速度有什么好的基准,但reticulate包是我所知道的数据传入和传出的Python脚本,而不使用的最佳方法一个网络服务器。它可以让你将python对象导入到R中,它们将像R对象一样工作,接受参数并返回值。

当我只想从单个文件运行函数时,我遇到了一些棘手的问题。它遇到了导入语句和多个相互调用的函数的问题。运行良好的是分别运行import声明(请参阅下面的sapply()声明),并将我的python脚本中的所有代码合并到一个对象中。这很好地工作,似乎对尽可能快地在Python运行它正常(虽然我没有做过任何真正的标杆)

library(reticulate) 
use_python(python = '/usr/bin/python') # optionally specify python location 

# Import statements are here, not in the file 
sapply(c("import mysql.connector", "import re"), py_run_string) 

# File contains only the definition of class MismatchFinder 
source_python("python_script.py") 

# Now we can call on that python object from R 
result <- MismatchFinder()$find_mismatch(arg1, arg2) 

我的印象是,如果你让你的Python代码到一个模块中它可能是更简单,加载它:py_module <- import_from_path('my_python_module', path = 'PATH')但我没有尝试。

希望这会有所帮助!