রাইমডাউন-এ YAML বর্তমান তারিখ


247

আমি ভাবছি যে .rmdডকুমেন্ট knitrএবং rmarkdownপ্যাকেজ দ্বারা প্রক্রিয়া করার জন্য কোনও ডকুমেন্টের ওয়াইএএমএল সামনের বিষয়টিতে বর্তমান তারিখটি রাখার কোনও কৌশল আছে কিনা । আমার উইকি পৃষ্ঠাগুলির শীর্ষে আমি নীচের লাইনটি ব্যবহার করতাম,

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

এবং এটি ব্যাপটিস্টে রূপান্তরিত হবে , 03 মে, ২০১৪ এইচটিএমএল আউটপুটে। এখন, আমি সরবরাহিত উন্নত প্যান্ডোক র‍্যাপারের সুবিধা নিতে চাই rmarkdown, তবে ওয়াইএএমএল শিরোনামে আর কোড থাকা কার্যকর বলে মনে হচ্ছে না:

---
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
আমি অবাক হয়েছি যে এটি আর কাজ করে না, যেহেতু এটি আমি যা করতাম ঠিক সেটাই ছিল। আমি সম্প্রতি যা চলছে তা দেখব। বিটিডাব্লু, ইয়ামল এছাড়াও আর এর মাধ্যমে গণনা করা মানগুলিকে সমর্থন করে !expr, যেমন date: !expr Sys.time(), তবে এখন এটিও কার্যকর হয় না।
ইহুই জাই

উত্তর:


366

এটি কিছুটা জটিল, তবে আপনাকে কেবল dateইনলাইন আর এক্সপ্রেশনটি উদ্ধৃত করে ক্ষেত্রটি ওয়াইএএমএলে বৈধ করতে হবে eg

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

তারপরে পার্সিং ত্রুটি চলে যাবে এবং মার্কডাউন আউটপুটটিতে তারিখটি তৈরি করা হবে যাতে পান্ডোক এর মানটি ব্যবহার করতে পারে Sys.time()


আমি অনুমান করি যে এর অর্থ ইনলাইন আর ব্যবহার করা যাবে না উদাহরণস্বরূপ includes: after_body: [ ... ]বৈধ ওয়াইএএমএল হিসাবে একটি তালিকা কেবল ফাইল নাম স্ট্রিং হবে ... সুতরাং কোনও সম্ভাবনা নেই includes: "`r list.files(...)`"?
লুই ম্যাডডক্স

1
@ যিহুই এটি এইচটিএমএল আউটপুটটিতে আমার জন্য কাজ করে, তবে .mdযদি আমার keep_md: trueওয়াইএএমএল শিরোনাম থাকে তবে ফলাফলের ফাইলে নয় not এর কোন সমাধান?
ম্যাট এসএম

7
অন্য কোনো আমেরিকান: date: "`r format(Sys.time(), '%B %d, %Y')`"
ubomb

হাই @ ইহুই, আমি পিডিএফ ফাইলে তারিখের আউটপুটে মাস পেয়েছি। আপনার কী ধারণা আছে আমি কীভাবে এই সমস্যাটি সমাধান করতে পারি? ধন্যবাদ.
এইচডাব্লু-সায়েন্টিস্ট

2
তারিখে যদি আপনার কোনও বিন্দুর দরকার হয় তবে সেগুলি থেকে বাঁচতে এবং r format(Sys.time(), '%d\\\\. %B %Y')
পলায়নকারীদের

72

শুধু ইয়াহুইতে অনুসরণ করা following অদ্ভুতভাবে, আমি এটি খুঁজে পেয়েছি:

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

এর থেকে আরও ভাল কাজ করে:

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

উত্তরোত্তর জন্য আরস্টুডিও 'যখনই এইচটিএমএল এবং পিডিএফ আউটপুটের মধ্যে স্যুইচ করে এবং এইভাবে কোডটি ভঙ্গ করে তখন বাইরের উক্তিগুলি পরিবর্তন করতে পছন্দ করে ।


1
ব্যাকস্ল্যাশ কি সেখানে থাকার কথা ছিল?
সিডব্লিউ

4
ব্যাকস্ল্যাশগুলি সেখানে থাকা উচিত নয়। তাদের ছাড়া কোডটি কাজ করে।
rakensi

1
সম্মত হয়। "" আমার পক্ষে কাজ করেনি তবে '' করেছেন। ধন্যবাদ!
লেয়া ওয়াসার

18

বা কেবল একক উদ্ধৃতি ডাবল উদ্ধৃতি এবং বিপরীতে, এটি ভাল কাজ করে।

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

12

একটি কার্যপ্রণালী হ'ল brewপ্যাকেজটি ব্যবহার করা এবং আপনার YAML সামনের বিষয়টি brewটেম্পলেট হিসাবে লিখুন write

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

KnitHTMLআরস্টুডিওতে বোতামটি দিয়ে এই কাজটি করতে , আপনি একটি কাস্টম আউটপুট ফর্ম্যাট লিখতে পারেন যা স্বয়ংক্রিয়ভাবে brewপ্রিপ্রসেসর হিসাবে ব্যবহার করবে । brewপ্রিপ্রোসেসে ব্যবহার করে তা নিশ্চিত করে যে knitrআপনার নথিতে কোড খণ্ডগুলি প্রাক প্রসেসিংয়ের পর্যায়ে অচ্ছুত রয়েছে। আদর্শভাবে, rmarkdownপ্যাকেজটির তার এপিআইতে মেটাডেটা প্রকাশ করা উচিত এবং ব্যবহারকারীদের এটি কোনও কাস্টম ফাংশনের মাধ্যমে চালানোর অনুমতি দেওয়া উচিত।


5
ধন্যবাদ রামনাথ, যে কাজ করবে। কর্মপ্রবাহে অতিরিক্ত পদক্ষেপ এবং টেম্প ফাইল না রাখাই ভালো হবে; আমার অভিজ্ঞতায় প্রক্রিয়াটি যত বেশি সংশ্লেষিত হবে, কয়েক মাস পরে এটি পুনরুত্পাদনযোগ্য কম (যেমন এটি কীভাবে কাজ করে তা আমি মনে করতে পারি না)।
baptiste


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 পরামর্শ হিসাবে, ভাল কাজ।

কেন এমনটি হয়েছে তা আমার কোনও ধারণা নেই এবং খনন করার আমার কাছে সময় নেই - সমাপ্তির জন্য প্রতিবেদন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.