有没有办法跳转到源脚本的末尾而不杀死R中的整个执行?

时间:2013-10-30 19:13:55

标签: r

假设我有一个类似于此的脚本Foo.r

source('Bar.r')
print("Hello World")

现在进一步假设在Bar.r中,如果某些条件为真,我想立即返回,而不是执行脚本的其余部分。

if (DO_NOT_RUN_BAR) return; // What should return here be replaced with?
// Remainder of work in bar

特别是,如果设置了DO_NOT_RUN_BAR,我希望Bar.r返回并Foo.r继续执行,打印Hello World

我意识到这样做的一种方法是反转if中的Bar.t语句并将整个脚本包装在if语句中,以检查{{1}的逻辑否定但是我仍然想知道我是否可以替换上面代码中的DO_NOT_RUN_BAR语句,以便在源代码时跳过其余return的执行。

3 个答案:

答案 0 :(得分:1)

根据定义,source解析文件直到文件末尾。 所以,我会将条形文件拆分为两部分:

source("bar1.R")
if (DO_RUN_BAR2) source("bar2.R")
print("Hello World")

这比管理具有危险副作用的全局变量更安全。

答案 1 :(得分:1)

在Bar.r中你可以做到

if (DO_NOT_RUN_BAR) stop();

然后在Foo.r中你这样称呼它

try(source("./bar.r"), silent=T)

答案 2 :(得分:0)

使用包含{...}的多行表达式创建脚本,并在中间使用stop:

{ print("test")
  print("test")
  print("test"); stop()
  print("test")
  print("test")
  print("test") }
#[1] "test"
#[1] "test"
#[1] "test"
#Error: