我可以判断R脚本是否在更小的情况下运行?

时间:2014-10-09 11:46:20

标签: r

Python有这个方便的结构:

def do_stuff():
  whatever
if __name__ == "__main__":
  do_stuff(()

因此,如果文件是从包含python foo.py./foo.py的命令行和相应的shebang行运行的,那么__name__变量将设置为__main__并且file作为脚本运行。但是,您也可以从交互式shell或其他python代码执行from foo import do_stuff并从那里运行do_stuff。然后,相同的脚本文件将充当模块而不是脚本。

我可以在littler脚本中执行类似的操作吗?像foo.R这样的东西:

#!/bin/env r
do_stuff = function(){
  whatever
}
if(?run as r command_line?){
 do_stuff()
}

然后我可以source("foo.R"),这将定义do_stuff(在我的默认全局环境中,但我们会稍微掩饰一下)。

一个可能的关键是在_(设置为脚本名称)下运行时环境中存在littler但是更强一些可能会更好。

1 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

#!/usr/local/bin/r --vanilla

doStuff <- function(print_me) {
  print(print_me)
}

if (!interactive()) {
  if (exists("argv")) {
    if (!is.null(argv) && length(argv)>0) {
      doStuff(argv[1])
    }
  }
}