#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