R中是否有类似Python的“if __name__ == "__main__": main()”的用法?

63 投票
6 回答
8288 浏览
提问于 2025-04-15 23:31

目标是有两种简单的方法来获取一些代码,比如说一个叫做 func.R 的文件,里面包含一个函数。使用 R CMD BATCH func.R 这个命令可以初始化这个函数并执行它。在一个会话中,输入 source("func.R") 就只是初始化这个函数而已。有没有什么好的想法?

6 个回答

5

你可以在R语言中传递参数,如果有参数的话就执行main()这个函数。关于参数的更多信息可以在这里找到:http://yangfeng.wordpress.com/2009/09/03/including-arguments-in-r-cmd-batch-mode/

47

另一种选择是:

#!/usr/bin/Rscript

# runs only when script is run by itself
if (sys.nframe() == 0){
# ... do main stuff
}
49

我觉得 interactive() 这个函数可能会有用。

这个函数在你以交互方式使用 R 的时候会返回 TRUE,而在其他情况下则返回 FALSE。所以你只需要用 if (interactive()) 就可以了。

也就是说,它的意思是:

if (!interactive()) {
  main()
}

撰写回答