Un programme externe a besoin d'un fichier d'entrée avec certains paramètres de contrôle et je souhaite générer des personnes automatiquement à l'aide de R. Habituellement, j'utilise simplement Coller ("paramètre1:", param1, ...) code> Pour créer la longue chaîne de texte et sortir dans un fichier, mais le script devient rapidement illisible. Ce problème est probablement bien adapté à WHISKER,
own_brew <- function(template, values, file=""){
env <- as.environment(values)
parent.env(env) <- .GlobalEnv
a <- textConnection("cout", "w")
out <- try(brew(text = template, envir=env, output=a))
if(inherits(out, "try-error")){
close(a)
stop()
}
cat(cout, file=file, sep="\n")
close(a)
invisible(cout)
}
4 Réponses :
Utilisation d'expressions régulières pour récupérer les noms de variable du modèle, vous pouvez valider avant de rendu, par exemple,
Merci, c'est une option. J'aime le fait que Brew a la capacité d'évaluer le code.
J'ai utilisé la moustache dans mon exemple, mais bien sûr, cela pourrait être facilement modifié pour travailler à la place avec des modèles de bronze.
Facilement ... si on sait des expressions régulières :)
Notez que cette solution ne fonctionnera pas s'il y a des listes dans les données, par ex. Ce type de syntaxe {{#repo}} {{nom}} b> {{/ repo}} de moustache.github.io/mustache.5.html
La nouvelle colle code> paquet
fournit une autre alternative,
library(glue) template <- 'Hello {name} You have just won ${value}!' data <- list( name = "Chris", value= 124) glue_data(template, .x=data) # Hello Chris You have just won $124! glue_data(template, .x=data[-1]) # Error in eval(expr, envir, enclos) : object 'name' not found
Depuis la version 1.1.0 (sur Cran 19 août 2016), le Stringr code> package
inclut la fonction str_interp () code> (malheureusement non mentionnée dans le fichier de nouvelles de la version).
Error in FUN(X[[i]], ...) : object 'name' not found
Tout en préparant le L'OP a créé une fonction C'est ma tentative d'améliorer La version de Baptiste : p> Les principales différences sont que StringR code> Réponse
J'ai remarqué que les questions de OP concernant l'utilisation du Brew () Code> n'a pas été abordé jusqu'à présent. En particulier, l'OP vous demandait comment fournir ses données code> à l'environnement et comment empêcher une chaîne de caractères étant renvoyée en cas d'erreur.
propre_brew () code> qui enveloppe l'appel à
brew () code>. Bien que, il existe un paquet alternatif disponible maintenant, je pense que la question originale mérite une réponse. P>
list2env () code> est utilisé pour transmettre la liste des valeurs
à
brew () code> et que l'appel à
Essayez () code> est évité en testant la valeur de retour
out code> pour une erreur. p>
Error in cat(name) : object 'name' not found
Error in own_brew(template, data[-1L]) :