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

#r #function #scoping #rprofile

#r #функция #определение области #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() ? Т.е. если rename функция вызывается внутри другой функции, я хотел бы переименовать объекты там, а не в глобальной среде.

Ответ №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