0

假设我有一个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检查逻辑否定的语句中DO_NOT_RUN_BAR,但我仍然想知道我是否可以替换return上面代码中的语句以跳过执行其余的Bar.r什么时候采购。

4

3 回答 3

1

按照定义,source解析文件直到文件结束。所以,我会将 bar 文件分成两部分:

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

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

于 2013-10-30T19:29:13.557 回答
1

在 Bar.r 你可以做

if (DO_NOT_RUN_BAR) stop();

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

try(source("./bar.r"), silent=T)
于 2013-10-30T19:55:55.643 回答
0

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

{ print("test")
  print("test")
  print("test"); stop()
  print("test")
  print("test")
  print("test") }
#[1] "test"
#[1] "test"
#[1] "test"
#Error: 
于 2013-10-30T22:17:04.490 回答