R: присоединить все переменные, локальные для функции, к глобальной среде после ее выполнения.

Предположим, я получаю какую-то функцию от клиента

f <- function(x) {
  if (x) {
    y <- 0
  } else {
    y <- 1
  }
}

Поскольку я получаю его от клиента, я не могу ничего изменить в f (то есть заменить ‹- на ‹‹- или явно присоединить переменные к глобальной среде).

Есть ли способ как-то получить доступ ко всем переменным, созданным в f, с любыми значениями, присвоенными им (после того, как я его запустил) из глобальной среды? Например: если бы я побежал

f(TRUE)

Я мог бы получить доступ к переменной «y» в глобальной среде и увидеть, что она установлена ​​​​на «0». Меня не беспокоит перезапись чего-либо в глобальной среде.

Спасибо!


person doubleOK    schedule 20.07.2016    source источник


Ответы (1)


Вариант 1, пройти в родительскую среду:

f <- function(x, env = parent.frame()) {
  if (x) {
    env$y <- 0
  } else {
    env$y <- 1
  }
}

Вариант 2, используйте специальное назначение R <<-

f <- function(x) {
  if (x) {
    y <<- 0
  } else {
    y <<- 1
  }
}

Там тоже больше вариантов. См. Тему: f">Как в R сделать переменные внутри функции доступными для функции более низкого уровня внутри этой функции? (с помощью, присоединения, окружения)

person Emil Rehhnberg    schedule 29.09.2016
comment
Ни один из них, похоже, не соответствует требованию OP не может ничего изменить в рамках функции... - person Gregor Thomas; 29.09.2016