是否有等效的pythonic"if __name__ =="__ main__":main()"?

gap*_*ppy 46 python r

目标是有两种简单的方法来源代码,例如func.R,包含一个函数.调用R CMD BATCH func.R初始化函数并评估是.在会话中,发布source("func.R")只是初始化函数.任何的想法?

Har*_*lan 43

我认为这个interactive()功能可能有效.

TRUE当交互式使用R时,此函数返回FALSE.所以只需使用if (interactive())

即相当于

if (!interactive()) {
  main()
}
Run Code Online (Sandbox Code Playgroud)

  • 使用Rscript shebang系列,我们的R脚本将比以往更加pythonic! (3认同)
  • @gappy你能更新这个答案吗?我觉得这个答案没有在标题中回答你的问题.它主要告诉您R文件是在命令行上还是使用Rscript. (3认同)
  • 如果您使用“rscript”调用主脚本并且其他文件是“source”,则这不起作用。 (2认同)
  • `Interactive()` 的行为与 `__name__ == '__main__'` 不完全相同。从“bR”获取文件“aR”,其中文件“aR”具有“print(interactive())”将返回“True”。正如@JAD 提到的。 (2认同)

小智 12

另一种选择是:

#!/usr/bin/Rscript

# runs only when script is run by itself
if (sys.nframe() == 0){
# ... do main stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 这比接受的答案要好,因为它允许获取脚本并且if块中的片段未被执行. (3认同)

Vin*_*nce 5

您可以将参数传递给R,如果存在参数,则运行main().更多关于这里的论点:http://yangfeng.wordpress.com/2009/09/03/including-arguments-in-r-cmd-batch-mode/