1
foo <- function() {
  # how to know what environment_of_caller is
}

caller <- function() {
  # environment_of_caller
  foo()
}

我正在编写的函数需要知道其调用者的环境。可以在不将环境作为参数传递的情况下做到这一点吗?

4

1 回答 1

4

假设您确实需要这样做,该函数parent.frame()给出了它。

foo <- function() {
  parent.frame()$a
}

caller <- function() {
  a <- 1
  foo()
}

caller()
## [1] 1

但是,通常人们会这样编写它(仅foo更改),因为它提供了所需的功能,而且还提供了更改所使用环境的灵活性。

foo <- function(envir = parent.frame()) {
  envir$a
}

caller <- function() {
  a <- 1
  foo()
}

caller()
## [1] 1
于 2021-01-08T20:26:38.737 回答