返回嵌入另一个函数的函数的值

时间:2012-05-22 21:18:53

标签: r

我想问一下如何获取嵌入在另一个函数中的函数的值,如下例所示:

message <- function() {
    inside.message <- function() {
        return("inside.message")
    }   
}

run.f <- function() {
    return.inside.mesage <- message()
    print(return.inside.mesage)
}           

run.f() # We do not get "inside.message"

提前感谢你们所有人

3 个答案:

答案 0 :(得分:2)

在你的代码中,message()返回一个函数。要调用它,您需要添加一对额外的括号:

> message()()
[1] "inside.message"

如果你在代码中用message()()替换message(),它就会做你想要的。

答案 1 :(得分:1)

正如您所写,message返回函数inside.message,因为您没有显式返回任何内容,而且它是message内部评估的最后一个表达式。

您似乎希望它从评估 inside.message返回值,这需要message中的另一行代码:

message <- function() {
    inside.message <- function() {
        return("inside.message")
    }
    inside.message()
}

答案 2 :(得分:1)

正如您所写,函数message返回一个函数,如果求值将返回“inside.message”。因此,有几种方法可以让R打印“inside.message”。

第一种方式:

message函数中,添加行return(inside.message())以便评估函数inside.message并返回结果,而不是返回函数本身:

message <- function() {
  inside.message <- function() {
    return("inside.message")
  }
  return(inside.message())
}

message()
# "inside.message"

然后评估run.f()也会打印“inside.message”。

第二种方式:

保留message,并将run.f()更改为以下

run.f <- function() {
  return.inside.mesage <- message()
  print(return.inside.mesage())
}

在上面,您将message()返回的函数分配给对象return.inside.message,然后评估该函数。