Объявите переменную внутри функции, которая будет использоваться вне функции (но не будет объявлена ​​глобально) - PullRequest
0 голосов
/ 07 декабря 2018

Если вы хотите объявить новую переменную в функции 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 голосов
/ 07 декабря 2018

Гнездо 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...