我试图弄清楚如果if语句从父函数foo
中的函数bar
为TRUE而返回一个对象,并且不执行bar
中的以下代码;或者如果为FALSE,请在bar
中执行以下代码。在下面的函数bar2
中,我可以测试foo
的输出,如果bar2
的输出为NULL,则在foo
中执行更多代码。但是,在尝试减少使用的代码行时,如果函数bar
中的if语句为TRUE,我想知道是否可以某种方式阻止在foo
函数中打印“howdy”。 stop
会这样做但是发出错误信号,这不是这里发生的事情。基本上我正在寻找等价的stop
,但返回一个没有错误的对象。
foo <- function(x){
if(x < 10){
"hello world"
} else
{ NULL }
}
bar <- function(y){
foo(y)
"howdy"
}
bar2 <- function(y){
out <- foo(y)
if(!is.null(out)){
out
} else
{
"howdy"
}
}
bar(5)
[1] "howdy"
bar2(5)
[1] "hello world"
答案 0 :(得分:2)
因此bar
不起作用的原因是因为范围。您必须在bar
中执行某种形式的检查; 这是不可避免的。
您可能正在寻找的是return
而不是停止:
bar <- function(y){
if (!is.null(foo(y))) {
return("hello world") # breaks out of the function
}
print("this will never print when foo doesn't return NULL")
"howdy" # ending part, so it would be returned only if foo(y) != "h..."
}
额外:
我不确定你是否有这个部分,但是你的函数工作的原因是因为你在调用某些东西时隐式返回,而它是函数的结尾部分。
E.g:
test <- function() {
"hello world"
a <- "hello world"
}
运行test()
将不会返回“hello world”,否则,因为最后一次运行不是通话。