Проблема
Есть ли способ заставить вызов функции в 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()})()