我已经使用R 4个月了,我真的希望有一种方法可以像在其他语言(C++,main ...)中一样使用Python。
我这样做的主要原因是,我在R脚本中使用的所有变量都是全局变量,它们可能会污染我在同一脚本中定义的函数的命名空间:
f <- function(x) {
x + a
}
a <- 50
f(5)对我来说,这只是个人喜好。我是一个草率的程序员,我想防止自己犯愚蠢的错误。
我当然可以定义main <- function() {},但我想知道是否有类似的东西:
if __name__ == "__main__":
main()(在此Python脚本中,如果函数名为main,则运行main()来调用主函数。)
发布于 2015-10-29 03:59:38
因此,它与__name__ == "__main__"不完全相同,但是您可能会发现这里的interactive函数很有趣。如果处于交互模式,则返回TRUE。
所以你可以这样做:
main <- function() {
....
}
if(!interactive()) {
main()
}但这有一点不同,因为如果脚本需要它,它总是会运行。
发布于 2017-06-07 06:28:15
,但是有没有类似于
if __name__ == "__main__":main()
在python中?
确实有!
但是您需要使用包‘box’而不是source/packages。然后,在您的模块中,您可以编写
if (is.null(box::name())) ……它等同于Python的if __name__ == '__main__'。
或者,您甚至可以使用klmr/sys模块。然后,您可以编写以下代码:
box::use(klmr/sys)
f = function(x) {
x + a
}
sys$run({
a = 50
sys$print(f(5))
})如果您在命令行上执行此脚本(通过Rscript或R CMD BATCH),它将执行sys$run指定的主函数。相反,如果将此脚本作为模块导入到另一个脚本中,则不会执行main函数,但仍会定义和导出f。
发布于 2016-02-22 22:34:37
回答你的确切问题(我不是在讨论它在R的上下文中是否有意义,我只是开始更深入地挖掘R,发现它不适合编写非交互式程序,所以我将其归咎于我)。您可以创建一个main函数并将输入参数传递给它。但是,请注意,对于这项工作,您不能通过R调用它。看起来你需要使用Rscript来代替。
main <-function (argv)
{
if (length (argv) < 3)
{
cat ('usage error: requires at least 3 arguments\n',
file=stderr ());
return (1);
}
cat (sprintf ('This program was called with %d arguments\n',
length (argv)));
return (0);
}
if (identical (environment (), globalenv ()))
quit (status=main (commandArgs (trailingOnly = TRUE)));https://stackoverflow.com/questions/33400312
复制相似问题