knitr

2013-04-10 13 views
7

में गैर अंग्रेजी विशेष वर्ण मैं knitr 1.1 उपयोग कर रहा हूँ। आर 3.0.0 में और WinEdt (RWinEdt 2.0) के भीतर। मुझे स्वीडिश पात्रों (ä, ö, å) को पहचानने वाले बुनाई के साथ समस्याएं आ रही हैं। यह आर के साथ कोई मुद्दा नहीं है; उन पात्रों को फ़ाइल नामों, निर्देशिका नामों, वस्तुओं आदि में भी पहचाना जाता है। स्वीवे में यह कोई समस्या नहीं थी।knitr

मैं पहले से ही अपने दस्तावेज़ में \usepackage[utf8]{inputenc} है, लेकिन knitr विशेष वर्ण को संभालने में सक्षम प्रतीत नहीं होता।

Warning in remind_sweave(if (in.file) input) : 
It seems you are using the Sweave-specific syntax; you may need Sweave2knitr("deskriptiv 130409.Rnw") to convert it to knitr 

processing file: deskriptiv 130409.Rnw 

(*) NOTE: I saw chunk options "label=läser_in_data" 
please go to http://yihui.name/knitr/options (it is likely that you forgot to 
quote "character" options) 

Error in parse(text = str_c("alist(", quote_label(params), ")"), srcfile = NULL) : 
1:15: unexpected input 
1: alist(label=lä 
       ^
Calls: knit ... parse_params -> withCallingHandlers -> eval -> parse 
Execution halted 

विशेष लेबल इसके बारे में शिकायत लेबल = लेजर है: knitr चलाने के बाद, मैं निम्न संदेश मिलता है। लेबल बदलना पर्याप्त नहीं है, चूंकि आर ऑब्जेक्ट्स का उपयोग करते हैं तो knitr भी शिकायत करता है।

मैं फ़ाइल मूल रूप से Sweave लिए बनाया गया था के बाद से Sweave2knitr() का इस्तेमाल किया है, लेकिन परिणाम नहीं बेहतर था: अब सभी आओ äpà ¥ ö में तब्दील हो गया है, दोनों आर मात्रा में और लेटेक्स पाठ में, और knitr अभी भी एक त्रुटि संदेश देता है।

सत्र जानकारी:

R version 3.0.0 (2013-04-03) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=Swedish_Sweden.1252 LC_CTYPE=Swedish_Sweden.1252   LC_MONETARY=Swedish_Sweden.1252 
[4] LC_NUMERIC=C     LC_TIME=Swedish_Sweden.1252  
attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  
other attached packages: 
[1] knitr_1.1 
loaded via a namespace (and not attached): 
[1] digest_0.6.3 evaluate_0.4.3 formatR_0.7 stringr_0.6.2 tools_3.0.0 

जैसा कि मैंने उल्लेख किया फ़ाइल नाम और स्वीडिश पात्रों के साथ वस्तुओं (के बाद से है कि पहले एक समस्या रही नहीं किया गया है), और भी पाठ स्वीडिश में होने की जरूरत है देखते हैं।

अंग्रेज़ी के अलावा अन्य काम करने के लिए हो रही knitr में किसी भी मदद के लिए धन्यवाद।

उत्तर

3

मुझे लगता है कि यदि आप knitr पर कॉल करने के लिए इस मोड का उपयोग कर रहे हैं तो आपको WinEdt में R-Sweave mode के रखरखाव से संपर्क करना होगा। मुद्दा यह है कि यदि आप अपने ओएस के मूल एन्कोडिंग का उपयोग नहीं कर रहे हैं तो WinEdt को फ़ाइल के एन्कोडिंग को knit() पर पास करना होगा। आपने UTF-8 का उल्लेख किया है लेकिन यह विंडोज के लिए मूल एन्कोडिंग नहीं है, इसलिए आपको \usepackage[utf8]{inputenc} का उपयोग नहीं करना चाहिए जबतक कि आप सुनिश्चित न हों कि आपकी फ़ाइल यूटीएफ 8-एन्कोडेड है।

कई समस्याएं यहां मिश्रित कर रहे हैं, और यह उन सब को एक भी जवाब के साथ हल करने के लिए की संभावना नहीं है।

पहली समस्या label=läser, जो वास्तव में label='läser' होना चाहिए है, यानी आप must quote सभी हिस्सा लेबल (दस्तावेज़ में अन्य लेबल की जाँच के रूप में अच्छी तरह से); knitr जब आप <<foo>>= बारे में (यह <<'foo'>>= में बदल गया है) स्वचालित रूप से अपने लेबल उद्धृत करने के लिए कोशिश करता है, लेकिन जब आप <<label=foo>>= का उपयोग करें (आप <<label='foo'>>= स्पष्ट रूप से लिखने के लिए है) यह काम नहीं करता। लेकिन यह समस्या शायद यहां जरूरी नहीं है।

मुझे लगता है कि वास्तविक समस्या यहाँ फ़ाइल इनकोडिंग (जो Windows के तहत बुरा है)। आप एक सिस्टम के तहत UTF-8 का उपयोग कर रहे हैं जो डिफ़ॉल्ट रूप से UTF-8 का सम्मान नहीं करता है। इस मामले में आपने knit('yourfile.Rnw', encoding = 'UTF-8') पर कॉल किया है, यानी knit() पर एन्कोडिंग पास करें। मैं WinEdt का उपयोग नहीं करता, इसलिए मुझे नहीं पता कि यह कैसे करें। आप hard-code the encoding in the configurations कर सकते हैं, लेकिन इसकी अनुशंसा नहीं की जाती है।

दो सुझाव:

  1. Windows के तहत UTF-8 का प्रयोग नहीं करते; अपने सिस्टम देशी एन्कोडिंग (Windows-1252, मुझे लगता है) का उपयोग करें;
  2. या WinEdt के बजाय RStudio का उपयोग करें, जो knitr पर एन्कोडिंग पास कर सकता है;

बीटीडब्ल्यू, Sweave2knitr() पॉप अप होने के बाद, आपके आरएनडब्ल्यू दस्तावेज़ में अन्य समस्याएं होनी चाहिए।

  1. अगर आप UTF-8 उपयोग करते हैं, Sweave2knitr('deskriptiv 130409.Rnw', encoding = 'UTF-8')
  2. अगर आप अपने ओएस के देशी एन्कोडिंग का उपयोग चलाते हैं, तो चलाने Sweave2knitr('deskriptiv 130409.Rnw')

कृपया पढ़ें: समस्या का निदान करने के लिए, वहाँ जाने के लिए दो तरीके हैं documentation यदि आपके पास Sweave2knitr() द्वारा मुद्रित नैदानिक ​​जानकारी के बारे में कोई प्रश्न हैं।

+0

धन्यवाद। कम से कम अब मैं अपनी फाइल पर knitr() चलाने में सक्षम हूं लेकिन विशेष पात्र अभी भी एक समस्या है। मैंने knitr() के अनुपालन के लिए स्वीवे भागों को सही किया। लेटेक्स टेक्स्ट (इस क्रम में) निर्दिष्ट करके सही ढंग से चलता है:
'\ usepackage [utf8] {inputenc}' '\ usepackage [T1] {fontenc}'। – user2266041

+1

@ user2266041 यदि आप सुनिश्चित हैं कि आप यूटीएफ -8 का उपयोग कर रहे हैं, तो गिल्बर्ट का जवाब काम करना चाहिए। –

2

आर-स्वीवे knitrknitr.edt मैक्रो के माध्यम से आमंत्रित करता है, जो स्वयं बुनाई लॉन्च करने के लिए knitrSweave.R में कोड का उपयोग करता है। इस बाद की लिपि में knit कमांड शीर्ष पर है और res <- knit(filename) पढ़ता है।

Yihui के सुझाव के बाद, आप

res <- knit(filename, encoding = 'UTF-8') 

knitr.edt और knitrSweave.R फाइलों के साथ इस आदेश को बदलने के लिए अपने %b\Contrib\R-Sweave फ़ोल्डर में होना चाहिए कोशिश कर सकते हैं, जहां %b अपने winEdt उपयोगकर्ता फ़ोल्डर (विन 7 के तहत "C:\Users\userA\AppData\Roaming\WinEdt Team\WinEdt 7" की तरह कुछ) है ।

वर्तमान में, मुझे नहीं पता कि हम इस हार्ड कोडिंग समाधान से बचने के लिए एन्कोडिंग को तर्क के रूप में कैसे पारित कर सकते हैं।

मैं विस्तारित वर्णों से फ़ाइल नामों से बचने का सुझाव दूंगा जो केवल समस्याओं के स्रोत हो सकते हैं। व्यक्तिगत रूप से, मैं कभी भी ऐसे नामों का उपयोग नहीं करता हूं।

+0

गिल्बर्ट: आपके उत्तर के लिए धन्यवाद। मैंने आपके द्वारा उल्लिखित पाठ जोड़ा लेकिन मुझे अभी भी आर भाग में विशेष विशेषताओं को स्वीकार करने वाले बुनाई के साथ समस्याएं हैं। फाइलनाम और आर ऑब्जेक्ट्स युक्त äåö बस पढ़ा नहीं जाता है। – user2266041

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