【问题标题】:Running Python from R从 R 运行 Python
【发布时间】:2018-01-17 18:34:45
【问题描述】:

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

【问题讨论】:

  • 这个问题似乎相当广泛。 Python到底应该运行什么?如果你想要一个 web 应用程序项目,你可以使用 Django (Python) 之类的东西,并将 R Shiny 应用程序作为 web 应用程序包含在内。但同样,请解释一下你到底想做什么。
  • 您可能想查看rPython
  • “主要是因为 .pyc 和速度”——这让我觉得这是一个不好的理由:Python 的性能通常很糟糕,而且总体上只比 R 略好一点。此外,.pyc 并没有真正提高性能,而 R 实际上通过编译代码具有更好的等价物,只需将代码放入包中即可。

标签: python r shiny rstudio


【解决方案1】:

我对它的速度没有任何好的基准,但是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 &lt;- import_from_path('my_python_module', path = 'PATH'),但我没有尝试过。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我相信您正在寻找的是下面的代码。它将在 R 中运行一个 python 脚本。

    system('python3 file_name.py')
    

    【讨论】:

    • 这是否解决了“后端”问题?从 OP 的问题来看,似乎有一些后台活动(例如服务器)需要在 Python 中运行,而只有一个 Web 应用程序需要在 R 中运行。您的解决方案适用于脚本,但如果有更多交互性需要运行,这个解决方案会遇到一些问题。
    • 感谢您的回复。使用 system() 是不够的,因为您实际上无法传递任何参数,您可以简单地运行脚本。如果您知道其他方式,请告诉我。
    猜你喜欢
    • 2013-11-22
    • 2013-05-03
    • 2016-12-15
    • 2015-01-31
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多