假设我有一个类似于此的脚本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
的执行。
答案 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: