如何通过Shiny中的R在Python文件中运行特定功能?

时间:2018-07-22 13:11:33

标签: python r shiny shiny-server reticulate

我正在使用source_python()函数通过R Shiny的用户界面运行Python脚本。代码运行正常,并且在其中成功。但是我想运行一个function2()中名为Task3.py的函数。我可以这样做吗?如果是,那我该怎么做?我只想执行function2()。我不想运行function1()function3()。我使用Googling发现的以下几行和语法来做到这一点。通过点击以下链接,我无法仅运行function2()。我遵循的链接是:

  

https://rstudio.github.io/reticulate/articles/calling_python.html

server.R:

library(reticulate)
observeEvent(input$action,{
    py_run_file("applications/Task3.py")
    function2()
  })

Task3.py:

def main(argv):
   function1()
   ....
   function2()
   ....
   function3()
   ....
if __name__ == "__main__":
    try:
        k=sys.exit(main(sys.argv))
    except (ValueError, IOError) as e:
        sys.exit(e)

1 个答案:

答案 0 :(得分:1)

要从python模块中调用单个函数,您需要将该模块作为对象导入并从中运行该函数,而不是将模块作为脚本执行。

您链接的教程从如何做到这一点开始。您将要使用py_run_file而不是import

library(reticulate)
observeEvent(input$action,{
    task3 <- import("Task3")
    task3$function2()
})

您可能必须切换到applications目录或将其添加到PYTHONPATH中,才能使导入正常进行。