访问功能的父环境并删除对象

时间:2016-10-22 07:12:31

标签: r function scoping rprofile

假设我想编写一个简单的重命名函数,该函数将加载.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()访问功能的父环境? I.e。如果在另一个函数中调用 rename 函数,我想在那里重命名对象,而不是在全局环境中。

1 个答案:

答案 0 :(得分:2)

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