Давайте рассмотрим 3 ситуации:
Случай 1
do.call(`<-`, list("lst$x$y$a", "somethingelse"))
Это создаст новую переменную с именем lst$x$y$a
в вашем рабочем пространстве, поэтому следующие две командыбудем называть разные объекты.(Первый - это объект, который вы храните в lst
, а второй - новая переменная. Вы должны вызывать его с помощью обратных кавычек, потому что его имя будет сбивать с толку R.)
> lst$x$y$a # [1] "foo"
> `lst$x$y$a` # [1] "somethingelse"
Случай 2
do.call(`<-`, list(parse(text = "lst$x$y$a"), "somethingelse"))
В основном вы получаете то, что ожидаете, но ошибка по-прежнему возникает:
недопустимая (do_set) левая сторона для назначения
Давайте проверим:
> parse(text = "lst$x$y$a") # expression(lst$x$y$a)
Он принадлежит классу expression
, и оператор <-
, похоже, не принимает этот класс в левой части.
Дело 3
Это даст то, что вы хотите:
do.call(`<-`, list(parse(text = "lst$x$y$a")[[1]], "somethingelse"))
Если поместить [[1]]
позади expression
объекта,call
объект будет извлечен и вступит в силу в операторе <-
.
> lst
# $x
# $x$y
# $x$y$a
# [1] "somethingelse"
#
# $x$y$b
# [1] "bar"
#
# $x$y$c
# [1] ""