Принудительная чистота вызова функции R - PullRequest
0 голосов
/ 15 декабря 2018

Проблема

Есть ли способ заставить вызов функции в R быть чистым?Вариант использования: drake.Я хочу защитить вызывающую среду и ее предков от модификаций функциями пользователя.

Контрольный пример

before <- ls()
f <- function() {
  x <<- 1
  data("mtcars")
  return("abc")
}
output <- pure_function_call(f())
after <- setdiff(ls(), c("before", "f", "output"))
print(before)
print(after)
print(output)

Требования

  • before и after должен согласиться.
  • Строки "x" и "mtcars" должны отсутствовать в обоих before и after.
  • output должны равняться "abc".
  • pure_function_call() должен вызвать f() в том же сеансе R, который вызывает тестовый набор.Например, callr::r() не допускается.

Неудачные прошлые попытки

  • local(f())
  • (function(){f()})()
...