Примечание: это отдельный от, хотя, возможно, аналогичный трюк с заменой получения имени переданного аргумента.
Рассмотрим следующую ситуацию: у меня есть некоторая функция вызывается, а возвращаемое значение должно быть присвоено некоторой переменной, например x
. Как я могу указать внутри функции, что имя, которое будет присвоено возвращаемому значению, будет x
, после вызова и назначения функции?
Например:
nameCapture <- function() {
# arbitrary code
captureVarName()
}
x <- nameCapture()
x
## should return some reference to the name "x"
Что в R ближайшая аппроксимация captureVarName()
, указанная в примере? Моя интуиция подсказывала, что в стеке вызовов будет что-то связанное с assign()
, где x
будет аргументом и может быть извлечено, но sys.call()
ничего подобного не дало; происходит ли это затем внутри, и если да, то какой разумный способ достичь чего-то вроде captureVarName()
?
Я полагаю, что это будет действовать аналогично тому, как работает следующее, но без assign()
, используя вместо этого оператор <-
:
nameCapture <- function() sys.call(1)[[2]]
assign("x", nameCapture())
x
# [1] "x"