2 votes

R : Vectoriser deparse(substitute(x))

Je veux vectoriser deparse(substitute(x)) .

f <- function(...){
deparse(substitute(...))
}

f(a, b, c)

Cela ne donne que le premier élément, "a" mais j'attends "a", "b", "c" . Par hasard, j'ai trouvé ce

f2 <- function(...){
deparse(substitute(...()))
}
f2(ab, b, c)

Cela donne "pairlist(ab, b, c)" . Maintenant, je pourrais supprimer toutes les choses dont je n'ai pas besoin. "a", "b", "c" . Mais cela ne me semble pas élégant. Existe-t-il un moyen de vectoriser deparse(substitute(x)) ?

Je sais qu'il y a question avec un problème similaire mais la réponse ne comprend pas deparse(substitute(x)) .

2voto

akrun Points 148302

Nous pouvons utiliser match.call

f <- function(...) sapply(as.list(match.call())[-1], as.character)
f(a)
#[1] "a"
f(a, b)
#[1] "a" "b"
f(a, b, c)
#[1] "a" "b" "c"

Ou en utilisant substitute

f <- function(...) sapply(substitute(...()), deparse)
f(a)
#[1] "a"
f(a, b)
#[1] "a" "b"
f(a, b, c)
#[1] "a" "b" "c"

2voto

Dason Points 18263

match.call est un bon point de départ. Je vous encourage à explorer tout ce que vous pouvez faire avec. Je crois que cela vous mènera là où vous le souhaitez :

f <- function(...){
    as.character(match.call(expand.dots = FALSE)[[2]])
}

et un exemple de son utilisation...

f(hey, you)
[1] "hey" "you"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X