Следует избегать оператора сверхприсвоения и других методов нарушения области видимости, если это вообще возможно, в частности, потому что это приводит к нечеткому коду и запутанным ситуациям, подобным этим.Но если вам действительно нужно было присвоить значения переменной, находящейся вне области видимости, вы можете использовать стандартное присваивание внутри eval
:
a <- c(1,2,3)
eval(a[3] <- 4, envir = -1)
a
[1] 1 2 4
Чтобы обобщить это далее (при выполнении присваивания внутри функции), вам может понадобиться использовать <<-
внутри eval
в любом случае.
Хотя изменение переменных вне области все еще является плохой идеей, использование eval
по крайней мере делает операцию более явной, так как вам нужноукажите среду, в которой должно быть вычислено выражение.
Все вышеперечисленное, присваивающие объем присваивания никогда не являются необходимыми сами по себе, и вы, возможно, должны найти способ написать свой скрипттак что это не полагается.