2015-10-08 14 views
5

Ho un carattere in R, ad esempio "\\frac{A}{B}". E ho valori per A e B, per esempio 5 e 10. C'è un modo che io possa sostituire il A e il B con il 5 e il 10?Sostituisci il nome della variabile nella stringa con valore variabile [R]

Ho provato quanto segue.

words <- "\\frac{A}{B}" 
numbers <- list(A=5, B=10) 
output <- do.call("substitute", list(parse(text=words)[[1]], numbers)) 

Ma ho un errore su \. C'è un modo per farlo? Sto cercando di creare equazioni con i valori delle variabili attuali.

+0

Il tuo approccio generale non è andare a lavorare per voi. Se provi il tuo codice con 'words <-" frac {A} {B} "' ottieni 'Error in parse (text = words): : 1: 5: unexpected '{' 1: frac {' –

+0

@ ShawnMehan - Sì, ci ho provato anche io. Sembra che ci dovrebbe essere un modo generale per farlo, come "sprintf" o qualcosa del genere, ma non riesco a capirlo. Grazie. –

risposta

3

è possibile utilizzare il stringi funzione stri_replace_all_fixed()

stringi::stri_replace_all_fixed(
    words, names(numbers), numbers, vectorize_all = FALSE 
) 
# [1] "\\frac{5}{10}" 
1

Sono più familiare con gsub rispetto a substitute. I seguenti lavori:

words <- "\\frac{A}{B}" 
numbers <- list(A=5, B=10) 
arglist = mapply(list, as.list(names(numbers)), numbers, SIMPLIFY=F) 
for (i in 1:length(arglist)){ 
    arglist[[i]]["x"] <- words 
    words <- do.call("gsub", arglist[[i]]) 
} 

Ma ovviamente questo non è sicuro perché si sta iterando sulle sostituzioni. Se, per esempio, la prima variabile ha valore "B" e la seconda variabile ha il nome "B", avrai problemi. Probabilmente c'è un modo più pulito.

2

Prova questo:

sprintf(gsub('\\{\\w\\}','\\{%d}',words),5,10)