在函数内声明一个变量以在函数外使用(但不能全局声明)

时间:2018-12-07 15:19:20

标签: r function variables

如果您想在函数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.

1 个答案:

答案 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