在函数内停止并返回对象而不报告错误

时间:2013-10-27 22:37:16

标签: r

我试图弄清楚如果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"

1 个答案:

答案 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”,否则,因为最后一次运行不是通话。