【问题标题】:How to run a specific function in Python file via R in Shiny?如何通过 Shiny 中的 R 在 Python 文件中运行特定函数?
【发布时间】:2018-07-22 13:11:32
【问题描述】:

我正在使用source_python() 函数通过 R Shiny 的用户界面运行 Python 脚本。代码运行正常,我成功了。但我想运行一个名为function2() 的函数,它位于Task3.py 中。我可以这样做吗?如果是,那么我该怎么做?我只想执行function2()。我不希望 function1()function3() 运行。我通过使用谷歌搜索找到的以下行和语法来做到这一点。通过以下链接,我无法成功运行 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)

【问题讨论】:

  • 链接教程中的第一个示例完全符合您的要求。只需导入您的模块而不是操作系统。

标签: python r shiny shiny-server reticulate


【解决方案1】:

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

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

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

您可能必须切换到 applications 目录或将其添加到您的 PYTHONPATH 才能正常导入。

【讨论】:

  • 先生,我这样做时遇到了这个错误:Warning: Error in py_get_attr_impl: AttributeError: module 'Task3' has no attribute 'function2()'
  • 那是因为你没有在你的模块中定义或导入function2。你需要修复你的 python 代码。
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 2023-03-19
  • 2016-09-05
  • 2014-01-03
  • 2017-05-18
相关资源
最近更新 更多