首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中使用main函数

在R中使用main函数
EN

Stack Overflow用户
提问于 2015-10-29 03:48:44
回答 5查看 13.1K关注 0票数 13

我已经使用R 4个月了,我真的希望有一种方法可以像在其他语言(C++,main ...)中一样使用Python。

我这样做的主要原因是,我在R脚本中使用的所有变量都是全局变量,它们可能会污染我在同一脚本中定义的函数的命名空间:

代码语言:javascript
复制
f <- function(x) {
  x + a
}
a <- 50
f(5)

对我来说,这只是个人喜好。我是一个草率的程序员,我想防止自己犯愚蠢的错误。

我当然可以定义main <- function() {},但我想知道是否有类似的东西:

代码语言:javascript
复制
if __name__ == "__main__": 
    main()

(在此Python脚本中,如果函数名为main,则运行main()来调用主函数。)

EN

回答 5

Stack Overflow用户

发布于 2015-10-29 03:59:38

因此,它与__name__ == "__main__"不完全相同,但是您可能会发现这里的interactive函数很有趣。如果处于交互模式,则返回TRUE

所以你可以这样做:

代码语言:javascript
复制
main <- function() {
    ....
}

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

但这有一点不同,因为如果脚本需要它,它总是会运行。

票数 12
EN

Stack Overflow用户

发布于 2017-06-07 06:28:15

,但是有没有类似于

if __name__ == "__main__":main()

在python中?

确实有!

但是您需要使用包‘box’而不是source/packages。然后,在您的模块中,您可以编写

代码语言:javascript
复制
if (is.null(box::name())) …

…它等同于Python的if __name__ == '__main__'

或者,您甚至可以使用klmr/sys模块。然后,您可以编写以下代码:

代码语言:javascript
复制
box::use(klmr/sys)

f = function(x) {
    x + a
}

sys$run({
    a = 50
    sys$print(f(5))
})

如果您在命令行上执行此脚本(通过RscriptR CMD BATCH),它将执行sys$run指定的主函数。相反,如果将此脚本作为模块导入到另一个脚本中,则不会执行main函数,但仍会定义和导出f

票数 5
EN

Stack Overflow用户

发布于 2016-02-22 22:34:37

回答你的确切问题(我不是在讨论它在R的上下文中是否有意义,我只是开始更深入地挖掘R,发现它不适合编写非交互式程序,所以我将其归咎于我)。您可以创建一个main函数并将输入参数传递给它。但是,请注意,对于这项工作,您不能通过R调用它。看起来你需要使用Rscript来代替。

代码语言:javascript
复制
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)));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33400312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档