如果您想在函数g
中声明一个新变量,我知道您可以使用<<-
将其声明为全局变量。
g=function(t){
a<<-t
}
g(0)
print(a)
#It gives "0"
如果函数g
已经在另一个函数f
中,并且您希望函数g
在函数f
中声明一个新变量,而不是全局地声明该怎么办?
g=function(t){
#declare the variable a and assign it the value t
}
f=function(t){
g(t)
return(a)
}
f(0)
#It should give 0.
print(a)
#It should say that the variable a is unknown.
答案 0 :(得分:2)
在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