Доступ к родительской среде функции и удаление объектов

Допустим, я хочу написать простую функцию 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 вызывается внутри другой функции, я хотел бы переименовать объекты там, а не в глобальной среде.


person Konrad    schedule 22.10.2016    source источник


Ответы (1)


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
person G. Grothendieck    schedule 22.10.2016