Рассмотрим типичный вызов deparse(substitute( R:
f1 <-function(u,x,y)
{print(deparse(substitute(x)))}
varU='vu'
varX='vx'
varY='vy'
f1(u=varU,x=varX,y=varY)
Это приводит к
[1] "varX"
чего мы ожидаем и чего хотим.
Затем возникает проблема, я пытаюсь добиться аналогичного поведения, используя аргументы ..., т.е.
f2 <- function(...)
{ l <- list(...)
x=l$x
print(deparse(substitute(x))) ### this cannot work but I would like something like that
}
Это, как не удивительно, не работает:
f2(u=varU,x=varX,y=varY)
[1] "\"vx\"" ### wrong ! I would like "varX"
Я пытался получить ожидаемое поведение, используя другую комбинацию решений, но ни одно из них не дает мне ожидаемого, и кажется, что я все еще недостаточно разбираюсь в ленивом eval, чтобы найти практические рекомендации в разумные сроки.
@ chinsoon12 Спасибо, это работает!





Вы можете получить список всех необработанных аргументов, выполнив
match.call(expand.dots = FALSE)$...
Или, если у вас Только есть точечные аргументы, через
as.list(match.call()[-1L])
Это даст вам именованный список, аналогичный list(...), но в его невычисленной форме (аналогично тому, что substitute делает с одним аргументом).
Альтернативой является использование rlang::quos(...), если вы хотите использовать пакет {rlang}, который возвращает аналогичный результат в несколько иной форме.
ты ищешь
f2 <- function(...) as.character(as.list(match.call())$x)?