Вы можете использовать assign
, чтобы изменить значение глобальной переменной внутри вашей функции:
> x <- 10
> test1 <- function() { x <- 3 }
> test1()
> x
[1] 10
> test2 <- function() { assign('x', 3, envir = .GlobalEnv) }
> test2()
> x
[1] 3
Как видите, test1
не делает то, что вы ожидаете, тогда как test2
делает.
edit: Более краткий подход, который я только что обнаружил, прочитав руководство, заключается в использовании оператора "superassignment" <<-
:
> test3 <- function() { x <<- 17 }
> test3()
> x
[1] 17
Руководство объясняет семантику простого присваивания в функции:
Обратите внимание, что любые обычные присваивания, выполняемые в функции, являются локальными и временными и теряются после выхода изфункция.Таким образом, присваивание X <- qr(X)
не влияет на значение аргумента в вызывающей программе.