2012-06-16 18 views
26

क्या स्वीवे/knitr का उपयोग करते समय round() फ़ंक्शन से बचने का कोई तरीका है? प्रत्येक \Sexpr{} में round(,2) लिखना वास्तव में परेशान है। मैं पूरे दस्तावेज़ के माध्यम से दो दशमलव स्थान रखना चाहता हूं।प्रत्येक Sexpr {} में round() का उपयोग करने से कैसे बचें?

आपकी मदद
Macs

+0

आईएमएचओ आप इसके लिए एक [हुक] (http://yihui.name/knitr/hooks) सेट कर सकते हैं। या कोशिश करें [pander] (http://daroczig.github.com/pander/) जो स्वचालित रूप से करता है :) – daroczig

+1

क्या आप आउटपुट को दो अंकों तक सीमित करना चाहते हैं, या आप हमेशा दो अंक चाहते हैं, भले ही वे हों शून्य ('1.00')? सबसे पहले आपको अपने पहले खंड में 'विकल्प (अंक = 2)' सेटिंग के साथ प्राप्त करने में सक्षम होना चाहिए। – vaettchen

+0

@vaettchen: 'अंक' से' 2' सेट करने के लिए, आपको 'pi * 100'' 314' के रूप में मिलेगा जो काफी अनुमानित अनुमान है। – daroczig

उत्तर

34

आप knitr package की the motivation पढ़ लिया है, तो आप शायद पता है कि मैं जो व्यक्ति के अंदर round() नफरत करता है \Sexpr{} सबसे हूँ। मैंने लंबे समय से स्वीवे के लिए आर कोर को सुझाव दिया लेकिन इसे नजरअंदाज कर दिया गया, इसलिए मैंने अपना खुद का पैकेज शुरू किया।

हालांकि जोश ओ'ब्रायन का जवाब बिल्कुल सही है, मुझे कहना चाहिए कि आपको वास्तव में केवल options(digits = 2)knitr के साथ चाहिए, और डिफ़ॉल्ट इनलाइन हुक को रीसेट करने की कोई आवश्यकता नहीं है क्योंकि डिफ़ॉल्ट हुक इस विकल्प का सम्मान करता है।

+2

इस संकेत के लिए धन्यवाद। यह वास्तव में एक बड़ी राहत है। मैं आर और लाटेक्स के साथ काम में काफी शुरुआत कर रहा हूं, लेकिन फिर भी स्वीवे के फायदे काफी स्पष्ट हैं। मुझे लगता है कि थोड़े समय में ज्यादातर लोग बुनाई में बदल जाएंगे। – beginneR

12

knitr में, के लिए धन्यवाद इनलाइन हुक \Sexpr{} बयान के उत्पादन में कार्रवाई करने के लिए इस्तेमाल किया जा सकता। इसलिए, यदि आप (जबकि अकेले समग्र digits विकल्प छोड़कर) इनलाइन कोड के लिए दशमलव के बाद सिर्फ 2 अंकों प्रिंट करना चाहते हैं तो आप इस तरह ऐसा कर सकते हैं:

## First have a look at the default inline hook function 
knit_hooks$get("inline") 

## Then customize it to your own liking 
inline_hook <- function(x) { 
    if(is.numeric(x)) x <- round(x, 2) 
    paste(as.character(x), collapse=", ") 
} 
knit_hooks$set(inline = inline_hook) 
+0

+1 - साफ, इस के रूप में इनलाइन और चंक उपस्थिति के बीच अंतर करने के लिए घर्षण जोड़ता है! – petermeissner

+1

@ पीटर मीटर - बिलकुल! [यहां बपतिस्मा का जवाब देखें] (http://stackoverflow.com/questions/16405536/knitr-inline-chunk- विकल्प-no-evaluation-or-just-render-highlighted-code) किसी अन्य (बहुत उपयोगी) उदाहरण के लिए अनुकूलित इनलाइन हुक। –

5

सबसे पहले, आप शायद round के बजाय formatC उपयोग करना चाहते हैं शून्य होने पर भी दो अंक प्राप्त करने के लिए। स्वीवे में ऐसा करने का कोई शानदार तरीका नहीं है; सबसे अच्छा विकल्प संभवतः एक संक्षिप्त नाम के साथ एक नया फ़ंक्शन बनाने के लिए है जो आपके इच्छित स्वरूपण करता है; जैसे

p <- function(x) {formatC(x, format="f", digits=2)} 

कि कम से कम टाइपिंग का एक छोटा सा की बचत होती है कुछ: एक नया Sweave ड्राइवर के साथ के बारे में mucking बिना,

The answer is $\Sexpr{p(x)}$. 

दुर्भाग्य से, मैं वहाँ क्या करने के लिए कुछ और है नहीं लगता है (शायद इस knitr का प्रयास करने का एक और कारण है, जो तेजी से जमीन प्राप्त कर रहा है)। स्वीवे यह आपके Sexpr कथन के अंदर क्या कर रहा है, और फिर परिणाम के साथ Sexpr कॉल को बदल रहा है।

as.character(eval(parse(text = cmd), envir = .GlobalEnv)) 

हालांकि, आप केवल as.character का नया संस्करण नहीं लिख सकते हैं; इस मुद्दे से अलग है कि यह अन्य अप्रत्याशित तरीकों से व्यवहार को बदल सकता है, नामस्थान के कारण, यह हमेशा वैश्विक वातावरण में एक और संस्करण होने पर भी base में संस्करण को कॉल करता है।

+0

स्वीवे के साथ अंधेरे voodoos के बारे में सोचना बहुत स्वाभाविक है :) आप जानते हैं कि स्वीवे कहाँ बदलना चाहिए, और यह भी मैंने कोर कोर के लिए सुझाव दिया है (वे न केवल 'as.character' का उपयोग करके बेहतर कर सकते हैं) और उनके द्वारा अनदेखा किया । –

+0

हां, वास्तव में अंधेरे voodoos। मेरे पास दो अलग-अलग प्रकार के ड्राइवर हैं जो चारों ओर बैठे हैं जो मुझे आवश्यक कुछ कार्यक्षमता जोड़ते हैं लेकिन वे लिखने और बनाए रखने के लिए दर्द हैं। मैं 'बुनाई' के बारे में अच्छी चीजें सुनता रहता हूं और यह कितनी चीजें आसान बनाता है। जल्द ही इसे आजमाने की उम्मीद है। @Yihui पर आपके काम के लिए धन्यवाद। – Aaron

+0

प्रश्न के पसीने घटक का जवाब देने के लिए +1 – petermeissner

संबंधित मुद्दे