访问函数的父环境并删除对象

Accessing function's parent environment and removing objects

假设我想编写一个简单的 rename 函数,它将通过 .Rprofile 加载。功能简单,可以类比:

carsNewName <- mtcars; rm(mtcars)

.Rprofile

.Rprofile 中可用的函数格式为:

.env$rename <- function(oldName, newName) {
    newName <- oldName
    rm(oldName, envir = parent.env())
    return(newName)
}

.env 通过 attach(.env).

附加

问题

如何通过 parent.env() 访问函数的父环境? 即如果在另一个函数中调用 rename 函数,我想重命名不在全局环境中的对象。

f 从父环境显示 x,然后从父框架显示 x

f <- function() {

  e <- environment() # current environment
  p <- parent.env(e)
  print(p$x)

  pf <- parent.frame()
  print(pf$x)

}

g <- function() {
  x <- 1
  f()
}

x <- 0
g()

给予:

[1] 0
[1] 1