मील का पत्थर वर्तमान तिथि rmarkdown में


247

मुझे आश्चर्य हो रहा है कि किसी .rmdदस्तावेज knitrके rmarkdownपैकेज और पैकेज द्वारा संसाधित किए जाने के मामले में YAML के सामने वर्तमान तारीख डालने की कोई चाल है । मैं अपने विकि पृष्ठों के शीर्ष पर निम्न पंक्ति रखता था,

   _baptiste, `r format(Sys.time(), "%d %B, %Y")`_

और यह html आउटपुट में 03 मई, 2014 को बैपटिस्ट में परिवर्तित हो जाएगा । अब, मैं इसके द्वारा प्रदान किए गए उन्नत पैंडोक रैपर का लाभ उठाना चाहूंगा rmarkdown, लेकिन YAML हेडर में r कोड होने से यह काम नहीं हो सकता है:

---
title: "Sample Document"
output:
  html_document:
    toc: true
    theme: united
date: `r format(Sys.time(), "%d %B, %Y")`
author: baptiste
---

Error in yaml::yaml.load(front_matter) : 
  Scanner error: while scanning for the next token at line 6, column 7
 found character that cannot start any token at line 6, column 7
Calls: <Anonymous> ... output_format_from_yaml_front_matter -> 
       parse_yaml_front_matter -> <Anonymous> -> .Call

कोई वर्कअराउंड?


7
मुझे आश्चर्य है कि यह अब काम नहीं करता है, क्योंकि यह वही है जो मैं करता था। मैं देखूंगा कि हाल ही में क्या चल रहा था। BTW, yaml भी R के माध्यम से गणना मूल्यों का समर्थन करता है !expr, जैसे date: !expr Sys.time(), लेकिन अब यह काम नहीं करता है।
यिहुई एक्सई

जवाबों:


366

यह थोड़ा मुश्किल है, लेकिन आपको dateइनलाइन आर एक्सप्रेशन को उद्धृत करके यमल में क्षेत्र को वैध बनाने की आवश्यकता है ;

date: "`r format(Sys.time(), '%d %B, %Y')`"

तब पार्सिंग त्रुटि हो जाएगी, और तिथि मार्कडाउन आउटपुट में उत्पन्न हो जाएगी ताकि पंडोक से मान का उपयोग कर सकें Sys.time()


मुझे लगता है कि इसका मतलब इनलाइन आर का उपयोग नहीं किया जा सकता है। उदाहरण के लिए एक सूची के includes: after_body: [ ... ]रूप में मान्य यम्ल केवल फाइलिंग स्ट्रिंग्स होगा ... इसलिए इसकी कोई संभावना नहीं है includes: "`r list.files(...)`"?
लुई मैडॉक्स

1
@ Yihui यह मेरे लिए html आउटपुट में काम करता है, लेकिन परिणामी .mdफ़ाइल में नहीं अगर मेरे पास keep_md: trueYAML हैडर में है। इसके लिए कोई उपाय?
मैट एसएम

7
किसी भी अन्य अमेरिकियों के लिए date: "`r format(Sys.time(), '%B %d, %Y')`":।
ubub

हाय @ यिहुइ, मुझे पीडीएफ़ फ़ाइल में तारीख उत्पादन में महीने लग गए। क्या आपके पास कोई विचार है कि मैं इस मुद्दे को कैसे हल कर सकता हूं? धन्यवाद।
एचडब्ल्यू-साइंटिस्ट

2
यदि आपको तिथि में डॉट की आवश्यकता है, तो उन्हें बचने और भागने से बचने के लिए ध्यान रखें:r format(Sys.time(), '%d\\\\. %B %Y')
BurninLeo

72

बस @ यिहुई पर चल रहा है। अजीब तरह से, मैंने पाया है कि:

'`r format(Sys.Date(), "%B %d, %Y")`'

से बेहतर काम करता है:

"`r format(Sys.Date(), '%B %d, %Y')`"

बाद के लिए RStudio, 'HTML और PDF आउटपुट के बीच स्विच करने और इस प्रकार कोड को तोड़ने पर बाहरी उद्धरण बदलने का विकल्प चुनता है ।


1
क्या बैकस्लैश का मतलब वहाँ होना था?
cwhy

4
बैकस्लैश नहीं होना चाहिए। उनके बिना, कोड काम करता है।
राकेंसी

1
माना। "" मेरे लिए काम नहीं किया लेकिन '' किया। धन्यवाद!
लेह वासर

18

या सिर्फ एक ही दोहरे उद्धरण चिह्नों और इसके विपरीत, यह अच्छी तरह से काम करता है।

---
title: "Sample Document"
output:
  html_document:
    toc: true
    theme: united
date: '`r format(Sys.time(), "%d %B, %Y")`'
author: baptiste
---

12

एक वर्कअराउंड brewपैकेज का उपयोग करना है और एक brewटेम्प्लेट के रूप में अपना YAML फ्रंट मैटर लिखना है ।

---
title: "Sample Document"
output:
  html_document:
    toc: true
    theme: united
date: <%= format(Sys.time(), "%d %B, %Y") %>
author: baptiste
---

अब आप एक ऐसे brew_n_renderफंक्शन का उपयोग कर सकते हैं जो डॉक्स का उपयोग करने से पहले होगा brewऔर फिर अंदर से रन करेगा rmarkdown

brew_n_render <- function(input, ...){
  output_file <- gsub("\\.[R|r]md$", ".html", input)
  brew::brew(input, 'temp.Rmd');  on.exit(unlink('temp.Rmd'))
  rmarkdown::render('temp.Rmd', output_file = output_file)
}

KnitHTMLRStudio में बटन के साथ यह काम करने के लिए , आप एक कस्टम आउटपुट प्रारूप लिख सकते हैं जो स्वचालित brewरूप से प्रीप्रोसेसर के रूप में उपयोग करेगा । brewप्रीप्रोसेस का उपयोग करना सुनिश्चित करता है कि knitrआपके दस्तावेज़ में कोड चोंच प्रीप्रोसेसिंग चरण के दौरान अछूते नहीं हैं। आदर्श रूप से, rmarkdownपैकेज को अपने एपीआई में मेटाडेटा को उजागर करना चाहिए और उपयोगकर्ताओं को एक कस्टम फ़ंक्शन के माध्यम से इसे चलाने की अनुमति देना चाहिए।


5
रामनाथ को धन्यवाद, यह काम करेगा। यह अच्छा होगा कि वर्कफ़्लो में अतिरिक्त चरणों और अस्थायी फ़ाइलों को न रखें; मेरे अनुभव में अधिक जटिल प्रक्रिया है, कम यह प्रतिलिपि प्रस्तुत करने योग्य है (यानी मुझे याद नहीं है कि यह कैसे काम करता है) कुछ महीनों बाद।
बपतिस्मा


1

यहां छवि विवरण दर्ज करेंमेरे लिए एक ही समस्या के लिए। मैं इस कोड का उपयोग करके इसे हल करता हूं।

---
title: "bla bla"
author: "My name"
date: \`r format(Sys.Date(), "%B %d, %Y")`\
output: html_document
---

अपडेट आप दूसरे प्रारूप का भी उपयोग कर सकते हैं।

---
title: "bla bla"
author: "My name"
date: \`r format(Sys.Date(), "%m %d,%Y")`\
output: html_document
---

श्रेष्ठ।


-1

मैं आज इस से काटा गया था। मैं था

date: "`r format(Sys.Date(), "%B %d, %Y")`"

और अधिक या कम ओपी के रूप में एक ही त्रुटि है, लेकिन केवल जब शब्द बुनाई। इससे पहले कि मैंने वर्ड को बुनाई की कोशिश की, पीडीएफ को बुनाई ठीक थी। बाद में यह या तो काम नहीं किया।

Error in yaml::yaml.load(front_matter) : 
  Scanner error: while scanning for the next token at line 3, column 31
 found character that cannot start any token at line 3, column 31
Calls: <Anonymous> ... output_format_from_yaml_front_matter -> 
       parse_yaml_front_matter -> <Anonymous> -> .Call`

स्थिति 31 पहला% संकेत है

इसके साथ प्रतिस्थापित

date: '`r format(Sys.Date(), "%B %d, %Y")`'

जैसा कि MLaVoie ने सलाह दी है, ठीक काम किया है।

मुझे नहीं पता कि ऐसा क्यों हुआ, और मेरे पास खुदाई करने के लिए समय नहीं है - रिपोर्ट खत्म करने के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.