YAML 中用于 rmarkdown 的内联 R 代码没有 运行
Inline R code in YAML for rmarkdown doesn't run
我试图在 rmarkdown
到 运行 文件之前 运行 在 YAML 前端中内联 R 代码。但是它对我不起作用。这是一个例子:
---
title: "**Title**"
classoption: xcolor=dvipsnames
output:
beamer_presentation:
slide_level: 2
pandoc_args: [
"--bibliography", "`r paste('path/to/bib')`"
]
---
<!-- slide 1 -->
## Intro ##
抛出错误:
pandoc-citeproc: could not find `r paste('path/to/bib')`
这是一个简单的例子,但突出了我的主要问题。如何将 rmarkdown 获取到 运行 YAML 前面内容中的内联 R 代码?
这是一个与这些问题类似的问题:
- Manipulate RMarkdown metadata from within R code chunks
- YAML current date in rmarkdown
所以我找到了一种获得我想要的东西的方法。我认为 Rmarkdown 不允许在 YAML 中使用 R expressions/commands,这可能是有充分理由的。我最终做的是将所有输出 yaml 命令放在一个名为 _output.Ryaml
的文件中,如下所示:
beamer_presentation:
slide_level: 2
includes:
in_header: "src/preamble.tex"
pandoc_args: [
"--bibliography", "`r paste('path/to/bib')`",
"--variable", "classoption:xcolor=dvipsnames",
"--variable", "fontsize:9pt"
]
然后在主 slides.Rmd
文件中,是这样的:
---
title: "**Title**"
author: Luke
---
<!-- slide 1 -->
## Intro ##
然后,我可以使用 R 代码(我将其放入 Makefile)生成幻灯片:
knitr::knit('_output.Ryaml', '_output.yaml')
rmarkdown::render('slides.Rmd')
unlink('_output.yaml')
似乎运行良好。如果有人有更好的主意,请告诉我!
我就是这样解决的。我从 RStudio 编织。奇怪的是,我不得不对日期和 csl 字段使用一种解决方案,而对参考书目字段使用另一种解决方案。 !expr 在日期或 csl 行中不起作用(对我而言)。引用的 r 代码在参考书目行中不起作用(对我而言)。我将参考书目和 csl 文件放在一个包中(inst/docs 文件夹)。不属于该软件包的 rmarkdown 文件使用这些文件。
---
title: "Title"
date: '`r format(Sys.time(), "%d %B, %Y")`'
output: html_document
bibliography: !expr system.file("docs", "my.bib", package = "MyPackage")
csl: '`r system.file("docs", "my.csl", package = "MyPackage")`'
---
# Introduction
Yada yada [@MyRef04].
# References
my.bib 是带有 MyRef04 的 BibTex 文件。 csl 是样式文件
这是一种情况,其中一个人维护一个包,其中包含数据、代码、参考书目等。包作者可能不知道的其他人从 GitHub 安装该包并写入或 运行 使用包的 rmarkdown 文件。用户几乎肯定不会使用 Git 或 GitHub,我不希望他们在从 GitHub.
安装软件包后必须下载任何额外的文件
更新:发布以上内容后,我碰巧从GitHub 安装了markdown,因为我需要开发版的东西。使用 GitHub 上的 rmarkdown 版本“1.7.5”,您可以在参考书目行中使用 r 代码:
---
title: "Title"
date: '`r format(Sys.time(), "%d %B, %Y")`'
output: html_document
bibliography: '`r system.file("docs", "my.bib", package = "MyPackage")`'
csl: '`r system.file("docs", "my.csl", package = "MyPackage")`'
---
从 GitHub
安装 rmarkdown
library(devtools)
install_github("rstudio/rmarkdown")
我试图在 rmarkdown
到 运行 文件之前 运行 在 YAML 前端中内联 R 代码。但是它对我不起作用。这是一个例子:
---
title: "**Title**"
classoption: xcolor=dvipsnames
output:
beamer_presentation:
slide_level: 2
pandoc_args: [
"--bibliography", "`r paste('path/to/bib')`"
]
---
<!-- slide 1 -->
## Intro ##
抛出错误:
pandoc-citeproc: could not find `r paste('path/to/bib')`
这是一个简单的例子,但突出了我的主要问题。如何将 rmarkdown 获取到 运行 YAML 前面内容中的内联 R 代码?
这是一个与这些问题类似的问题:
- Manipulate RMarkdown metadata from within R code chunks
- YAML current date in rmarkdown
所以我找到了一种获得我想要的东西的方法。我认为 Rmarkdown 不允许在 YAML 中使用 R expressions/commands,这可能是有充分理由的。我最终做的是将所有输出 yaml 命令放在一个名为 _output.Ryaml
的文件中,如下所示:
beamer_presentation:
slide_level: 2
includes:
in_header: "src/preamble.tex"
pandoc_args: [
"--bibliography", "`r paste('path/to/bib')`",
"--variable", "classoption:xcolor=dvipsnames",
"--variable", "fontsize:9pt"
]
然后在主 slides.Rmd
文件中,是这样的:
---
title: "**Title**"
author: Luke
---
<!-- slide 1 -->
## Intro ##
然后,我可以使用 R 代码(我将其放入 Makefile)生成幻灯片:
knitr::knit('_output.Ryaml', '_output.yaml')
rmarkdown::render('slides.Rmd')
unlink('_output.yaml')
似乎运行良好。如果有人有更好的主意,请告诉我!
我就是这样解决的。我从 RStudio 编织。奇怪的是,我不得不对日期和 csl 字段使用一种解决方案,而对参考书目字段使用另一种解决方案。 !expr 在日期或 csl 行中不起作用(对我而言)。引用的 r 代码在参考书目行中不起作用(对我而言)。我将参考书目和 csl 文件放在一个包中(inst/docs 文件夹)。不属于该软件包的 rmarkdown 文件使用这些文件。
---
title: "Title"
date: '`r format(Sys.time(), "%d %B, %Y")`'
output: html_document
bibliography: !expr system.file("docs", "my.bib", package = "MyPackage")
csl: '`r system.file("docs", "my.csl", package = "MyPackage")`'
---
# Introduction
Yada yada [@MyRef04].
# References
my.bib 是带有 MyRef04 的 BibTex 文件。 csl 是样式文件
这是一种情况,其中一个人维护一个包,其中包含数据、代码、参考书目等。包作者可能不知道的其他人从 GitHub 安装该包并写入或 运行 使用包的 rmarkdown 文件。用户几乎肯定不会使用 Git 或 GitHub,我不希望他们在从 GitHub.
安装软件包后必须下载任何额外的文件更新:发布以上内容后,我碰巧从GitHub 安装了markdown,因为我需要开发版的东西。使用 GitHub 上的 rmarkdown 版本“1.7.5”,您可以在参考书目行中使用 r 代码:
---
title: "Title"
date: '`r format(Sys.time(), "%d %B, %Y")`'
output: html_document
bibliography: '`r system.file("docs", "my.bib", package = "MyPackage")`'
csl: '`r system.file("docs", "my.csl", package = "MyPackage")`'
---
从 GitHub
安装 rmarkdownlibrary(devtools)
install_github("rstudio/rmarkdown")