2

我试图弄清楚如果 if 语句从foo父函数中的函数为 TRUE 时如何返回对象bar,而不是在中执行以下代码bar;或者如果为 FALSE,则在bar. 在下面的函数中,如果输出为 NULL bar2,我可以测试输出,foo然后执行更多代码。但是,在尝试减少使用的代码行时,我想知道如果函数中的 if 语句为 TRUE,我是否可以以某种方式阻止在函数中打印“你好”。 会这样做,但会发出错误信号,这不是这里发生的事情。基本上我正在寻找一个等效但返回一个没有错误的对象。bar2foobarfoostopstop

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"
4

1 回答 1

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..."
}

额外的:

我不确定你是否得到这部分,但你的函数工作的原因是因为你在调用某些东西时隐式返回一些东西,而它是函数的结束部分。

例如:

test <- function() {
 "hello world"
  a <- "hello world"
}

运行test()不会返回它本来会的“hello world”,因为最后运行的东西不是调用。

于 2013-10-27T22:42:48.590 回答