Гнездо g
в f
и обязательно инициализируйте a
.
f = function(t){
g = function(t){
a <<- t
}
a <- NULL
g(t)
return(a)
}
f(0)
## [1] 0
Если вы не хотите определять g
в f
, вы можете динамически вставить его:
g = function(t){
a <<- t
}
f = function(t){
environment(g) <- environment()
a <- NULL
g(t)
return(a)
}
f(0)
## [1] 0
Альтернативами a <<- t
в любом из приведенных выше примеров являются следующие.Они не требуют инициализации a
.
parent.frame()$a <- t
или
assign("a", t, parent.frame())
Например,
g = function(t, envir = parent.frame()) {
envir$a <- t
}
f = function(t) {
g(t)
return(a)
}
f(0)
## [1] 0