2015-10-08 23 views
5

ile değiştirin. R'de bir karakter var, "\\frac{A}{B}" deyin. Ve A ve B için değerlerim var, 5 ve 10. A ve B'u 5 ve 10 ile değiştirebileceğim bir yol var mı?Değişken adını [R]

Aşağıdakileri denedim.

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

Ancak bir hata alıyorum \. Bunu yapabileceğimin bir yolu var mı? Ben gerçek değişken değerleri ile denklemler yaratmaya çalışıyorum.

+0

kullanabilirsiniz. Eğer kodunuzu "kelimeler <-" ile denerseniz {A} {B} "' parşömende hata alırsınız (text = words): : 1: 5: beklenmedik '{' 1: frac {' –

+0

@ ShawnMehan - Evet, bunu da denedim. Görünüşe göre, bunu yapmak için genel bir yol olmalı, "sprintf" ya da bir şey gibi, ama bunu anlayamıyorum. Teşekkürler. –

cevap

3

Sizin genel yaklaşım sizin için çalışmaya gitmiyor Stringi fonksiyonunu stri_replace_all_fixed()

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

ile substitute'dan daha tanıdıkım. Aşağıdaki işler:

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]]) 
} 

Ama değiştirmelerin üzerinde yineleme çünkü elbette bu güvensiz

. Eğer ilk değişken "B" değerine sahipse ve ikinci değişken "B" ismine sahipse, sorunlarınız olacaktır. Muhtemelen daha temiz bir yol var.

2

bu deneyin:

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