我正在使用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)
答案 0 :(得分:1)
要从python模块中调用单个函数,您需要将该模块作为对象导入并从中运行该函数,而不是将模块作为脚本执行。
您链接的教程从如何做到这一点开始。您将要使用py_run_file
而不是import
:
library(reticulate)
observeEvent(input$action,{
task3 <- import("Task3")
task3$function2()
})
您可能必须切换到applications
目录或将其添加到PYTHONPATH中,才能使导入正常进行。