2 votes

Créer une chaîne analysable à partir d'une liste de noms et d'un nom de fonction.

J'en ai apparemment une simple que ma matière grise refuse actuellement de saisir - disons que j'ai une liste :

list(a = "foo", b = c("bar", "biz", "booze"))

et une fonction fn . Comment puis-je obtenir une chaîne de caractères comme celle-ci :

"fn(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))"

P.S.

Je sais que je vais regretter d'avoir posé cette question demain matin...

5voto

joran Points 68079

Cela devrait vous permettre de commencer, n'est-ce pas... ?

deparse(list(a = "foo", b = c("bar", "biz", "booze")),control = NULL)
[1] "list(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))"

Une version plus complète, que j'ai terminée au moment où @aL3xa a commenté...

gsub("^list","fn",
    deparse(list(a = "foo", b = c("bar", "biz", "booze")),control = NULL))

3voto

Josh O'Brien Points 68397

Vous pouvez également manipuler les objets linguistiques directement, comme décrit dans la section Chapitre 6 de la définition du langage R :

X <- quote(list(a = "foo", b = c("bar", "biz", "booze")))
X[[1]] <- quote(fn)  ## as.symbol("fn") would also work
deparse(X)
# [1] "fn(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))"

Ou, si votre liste est déjà stockée dans un objet nommé, vous pouvez simplement utiliser c() y as.call() pour reconstituer l'appel souhaité :

ll <- list(a = "foo", b = c("bar", "biz", "booze"))
deparse(as.call(c(as.symbol("fn"), ll)))
# [1] "fn(a = \"foo\", b = c(\"bar\", \"biz\", \"booze\"))"

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