我希望R脚本有一个main()函数,它在交互模式下执行。但是在查找文件时不应执行main()函数。在
There is already a question about this一个很好的答案建议使用interactive()函数。但是这对我来说不管用。我没有足够的声誉点来评论或回答这个问题。所以我再问这个问题。在
我写在script_1.r
if(interactive()){
your main code here
}
如果我使用knitr放弃一个html或pdf文档,则源代码脚本。不会执行if(interactive())
下的代码。这对我有好处,这就是我想要的。在
我的问题是,如果我source("script_1.r")
来自script_2.r
的交互模式,它仍然会在这个if(interactive())
部分下运行代码。在
获得所需控制权的最佳方法是使用选项。在
例如,'script.r'将如下所示:
如果您在交互模式下查找文件,并且不希望
main
执行,只需在调用source
之前调用options(run.main=FALSE)
。如果将脚本与knitr一起使用,并且希望main
执行,请不要设置该选项,它将默认为TRUE
。或者,如果您不希望main与knitr一起运行,请在调用之前调用options(run.main=FALSE)
。在你注意到了,不,这不是一回事。
if(interactive())
完全按照名字所说的做——它测试代码是否在交互式shell中运行。不多不少。在R中没有Python中的
if __name__ == '__main__'
的直接等价物,因为R没有与Python相同的模块概念,source
d代码只是直接执行。在但是,您可以编写自己的
source
命令来替换默认命令并执行必要的检查。在也就是说,您链接的问题确实是contain an answer which presents a workaround,并且基本上复制了Python的功能。然而,这似乎不是您想要的,因为当被Knitr调用时,它将不会如您所期望的那样工作。在
相关问题 更多 >
编程相关推荐