在R中,有没有办法退出调用函数并返回一个值?有点像return(),但来自父功能?
parent <- function(){
child()
# stuff afterward should not be executed
}
child <- function(){
returnFromParent("a message returned by parent()")
}
Run Code Online (Sandbox Code Playgroud)
似乎stop()正在做那样的事情.我想要做的是写一个小替换stop(),返回stop()写入的消息stderr.
在G5W的建议之后更新:我有大量的检查,stop()如果测试失败,每个都会产生一个检查,但是如果之前的检查失败,则无法评估后续条件,因此该函数必须在失败之后退出.为了'正确',我必须建立一个巨大的if else构造,我想避免.
免责声明:这听起来是一个 XY 问题,将停止消息打印到 stdout 几乎没有任何价值,如果是交互式的,则不应该成为问题,如果在脚本中仅使用通常的重定向2 > &1将 stderr 消息写入 stdout,或者可能使用sink如回答这个问题。
现在,如果我正确理解了您所追求的内容,我将执行以下操作以避免过多的代码重构。
首先定义一个处理错误的函数:
my_stop <- function() {
e <- geterrmessage()
print(e)
}
Run Code Online (Sandbox Code Playgroud)
现在配置系统以将错误发送到您的函数(错误处理程序)并抑制错误消息:
options(error = my_stop)
options(show.error.messages=FALSE)
Run Code Online (Sandbox Code Playgroud)
现在我们来测试一下:
f1 <- function() {
f2()
print("This should not be seen")
}
f2 <- function() {
stop("This is a child error message")
}
Run Code Online (Sandbox Code Playgroud)
输出:
> f1()
[1] "Error in f2() : This is a child error message\n"
Run Code Online (Sandbox Code Playgroud)
得到它了.我想我正在寻找这样的东西:
parent <- function(){
parent_killing_child()
print("do not run this")
}
parent_killing_child <- function(){
do.call(return, list("my message"), envir = sys.frame(-1))
}
parent()
Run Code Online (Sandbox Code Playgroud)
感谢您的所有建议.
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |