我已经使用R 4个月了,我真的希望有一种方法可以像其他语言一样使用"main"函数:C++,python ......
我想要的主要原因是我在R脚本中使用的所有变量都是全局变量,可能会污染我在同一个脚本中定义的任何函数,如下所示:
f <- function(x) {
x + a
}
a <- 50
f(5)
Run Code Online (Sandbox Code Playgroud)
对我来说,这只是个人偏好.我是一个邋program的程序员,我想防止自己犯下愚蠢的错误.
我当然可以定义main < - function(){},但是有类似的东西
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
在python?所以我可以轻松运行脚本?(上面的代码表示:在这个脚本中,如果函数名是"main",则运行"main()",即调用main函数)
Lei*_*sen 10
所以,它并不完全相同__name__ == "__main__",但你可能会发现interactive这里的功能很有趣.TRUE如果您处于交互模式,则会返回.
所以你可以这样做:
main <- function() {
....
}
if(!interactive()) {
main()
}
Run Code Online (Sandbox Code Playgroud)
这有点不同,因为如果脚本需要它将始终运行.
但是有没有类似的东西
Run Code Online (Sandbox Code Playgroud)if __name__ == "__main__": main()在蟒蛇?
确实有!
但是您需要使用包“ box ”而不是source/packages。然后,在你的模块中,你可以写
if (is.null(box::name())) …
Run Code Online (Sandbox Code Playgroud)
… 相当于 Python 的if __name__ == '__main__'.
或者您甚至可以使用该klmr/sys模块。然后你可以写以下内容:
box::use(klmr/sys)
f = function(x) {
x + a
}
sys$run({
a = 50
sys$print(f(5))
})
Run Code Online (Sandbox Code Playgroud)
如果您在命令行(通过Rscript或R CMD BATCH)执行此脚本,它将执行由 指定的主要功能sys$run。相反,如果将此脚本作为模块导入到另一个脚本中,则不会执行 main 函数,但f仍会被定义和导出。