2015-10-08 14 views
5

मेरे पास आर में एक चरित्र है, "\\frac{A}{B}" कहें। और मेरे पास A और B के लिए मान हैं, 5 और 10 कहें। क्या कोई तरीका है कि मैं A और B को 5 और 10 के साथ प्रतिस्थापित कर सकता हूं?वैरिएबल वैल्यू वैरिएबल वैल्यू के साथ स्ट्रिंग में बदलें [आर]

मैंने निम्नलिखित की कोशिश की।

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

लेकिन मुझे \ पर कोई त्रुटि मिलती है। क्या कोई तरीका है कि मैं यह कर सकता हूं? मैं वास्तविक चर मूल्यों के साथ समीकरण बनाने की कोशिश कर रहा हूं।

+0

इस्तेमाल कर सकते हैं आपका सामान्य दृष्टिकोण आप के लिए काम करने के लिए नहीं जा रहा है। यदि आप 'कोड <- "frac {ए} {बी}" के साथ अपना कोड आज़माते हैं, तो आपको पार्स (टेक्स्ट = शब्द) में त्रुटि मिलती है: : 1: 5: अप्रत्याशित' {' 1: frac {' –

+0

@ शॉनमेन - हाँ, मैंने भी कोशिश की। ऐसा लगता है कि ऐसा करने के लिए कुछ सामान्य तरीका होना चाहिए, जैसे 'स्प्रिंटफ' या कुछ, लेकिन मैं इसे समझ नहीं सकता। धन्यवाद। –

उत्तर

3

आप stringi समारोह stri_replace_all_fixed()

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

मैं gsubsubstitute से अधिक परिचित हूं। निम्नलिखित काम करता है:

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

लेकिन निश्चित रूप से इस असुरक्षित है, क्योंकि आप प्रतिस्थापन से अधिक पुनरावृत्ति कर रहे हैं। यदि, कहें, पहले चर के मान "बी" हैं और दूसरे चर का नाम "बी" है, तो आपको समस्याएं होंगी। शायद एक क्लीनर तरीका है।

2

इस प्रयास करें:

sprintf(gsub('\\{\\w\\}','\\{%d}',words),5,10) 
संबंधित मुद्दे