1

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

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"

提前谢谢大家

4

3 回答 3

2

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

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

如果您在代码中将 message() 替换为 message()() ,它将执行您想要的操作。

于 2012-05-22T21:35:41.863 回答
1

正如您编写的那样,message返回该函数inside.message,因为您没有显式返回任何内容,它是在message.

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

message <- function() {
    inside.message <- function() {
        return("inside.message")
    }
    inside.message()
}
于 2012-05-22T21:33:11.583 回答
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,然后评估该函数。

于 2012-05-22T21:33:44.593 回答