R супер вектор назначения - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть функция, в которой я использую оператор superassingment для обновления переменной в глобальной среде.Это прекрасно работает, если это одно значение, например

    a <<- 3

Однако я получаю ошибки с подмножествами фреймов данных и таблиц данных, например

    a <- c(1,2,3)
    a[3] <<- 4
    Error in a[3] <<- 4 : object 'a' not found 

Любая идея, почему это так и какчтобы решить это?

Спасибо!

1 Ответ

0 голосов
/ 14 декабря 2018

Следует избегать оператора сверхприсвоения и других методов нарушения области видимости, если это вообще возможно, в частности, потому что это приводит к нечеткому коду и запутанным ситуациям, подобным этим.Но если вам действительно нужно было присвоить значения переменной, находящейся вне области видимости, вы можете использовать стандартное присваивание внутри eval:

a <- c(1,2,3)

eval(a[3] <- 4, envir = -1)

a
[1] 1 2 4

Чтобы обобщить это далее (при выполнении присваивания внутри функции), вам может понадобиться использовать <<- внутри eval в любом случае.

Хотя изменение переменных вне области все еще является плохой идеей, использование eval по крайней мере делает операцию более явной, так как вам нужноукажите среду, в которой должно быть вычислено выражение.

Все вышеперечисленное, присваивающие объем присваивания никогда не являются необходимыми сами по себе, и вы, возможно, должны найти способ написать свой скрипттак что это не полагается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...