rmarkdown의 YAML 현재 날짜


247

.rmd처리 할 문서 knitrrmarkdown패키지 의 YAML 전면에 현재 날짜를 입력하는 트릭이 있는지 궁금 합니다. 예전에 위키 페이지 상단에 다음 줄이있었습니다.

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

html 출력으로 2014 년 5 월 3 일 baptiste 로 변환됩니다 . 이제는에서 제공하는 고급 pandoc 래퍼를 활용하고 싶지만 rmarkdownYAML 헤더에 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()하지만 이제는 작동하지 않습니다.
Yihui Xie

답변:


366

이것은 약간 까다 롭지 만 date인라인 R 표현식을 인용하여 YAML 에서 필드를 유효 하게 만들어야합니다.

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

그런 다음 구문 분석 오류가 사라지고 Pandoc이의 값을 사용할 수 있도록 마크 다운 출력에 날짜가 생성됩니다 Sys.time().


includes: after_body: [ ... ]유효한 YAML은 파일 이름 문자열 일뿐이므로 목록에 인라인 R을 사용할 수 없다는 것을 의미 합니다 includes: "`r list.files(...)`".
Louis Maddox

1
@Yihui 이것은 html 출력에서 ​​작동하지만 YAML 헤더에 .md있으면 결과 파일 에서는 작동하지 않습니다 keep_md: true. 이것에 대한 해결책?
Matt SM

7
다른 미국인의 경우 : date: "`r format(Sys.time(), '%B %d, %Y')`".
ubomb

안녕하세요 @Yihui, pdf 파일의 날짜 출력에서 ​​월이 깨졌습니다. 이 문제를 어떻게 해결할 수 있는지 알고 있습니까? 감사합니다.
HW-Scientist

2
날짜에 점이 필요한 경우, 탈출을 피하고 탈출을 피하십시오.r format(Sys.time(), '%d\\\\. %B %Y')
BurninLeo

72

@Yihui를 팔로우합니다. 이상하게도 나는 그것을 발견했다.

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

다음보다 잘 작동합니다.

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

후자의 경우 RStudio '는 HTML과 PDF 출력간에 전환 할 때마다 외부 인용 부호를 변경하여 코드를 손상시킵니다 .


1
백 슬래시는 거기에 있었습니까?
cwhy

4
백 슬래시는 없어야합니다. 그것들이 없으면 코드가 작동합니다.
rakensi

1
동의했다. ""는 나를 위해 작동하지 않았지만 ''. 감사합니다!
Leah Wasser

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템플릿 으로 작성하는 것 입니다.

---
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패키지는 메타 데이터를 API에 노출하고 사용자가 사용자 정의 기능을 통해 메타 데이터를 실행할 수 있도록해야합니다.


5
Ramnath에게 감사합니다. 워크 플로에 추가 단계 및 임시 파일이없는 것이 좋습니다. 내 경험상 몇 개월 후 프로세스가 더 복잡해지면 재현성이 떨어집니다 (즉, 작동 방식을 기억할 수 없습니다).
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")`"

OP와 거의 같은 오류가 있지만 단어로 뜨개질 할 때만 발생합니다. Word로 편직하기 전에 pdf 편직은 괜찮 았습니다. 그 후에도 작동하지 않았습니다.

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.