使用 R markdown 和 knitr:可以在 YAML 中解释 R 对象
Posted
技术标签:
【中文标题】使用 R markdown 和 knitr:可以在 YAML 中解释 R 对象【英文标题】:Using R markdown and knitr: Possible to get R objects interpreted in YAML 【发布时间】:2014-11-06 22:27:30 【问题描述】:我正在使用knitr
、R markdown
和自定义LaTeX
文件来编写手稿。摘要设置为 YAML frontmatter 的一部分。这很好用,除了我想包含在摘要中的结果是在文档的后面生成的。
在 YAML 中包含摘要对我来说很有意义,我更愿意以这种方式保留它。关于让摘要利用文档后面发生的计算的方法有什么想法吗?
一个简单的例子:
---
title: 'How do I interpret R objects in YAML that are created in the document?'
author: Jeff Hollister
output:
pdf_document:
fig_caption: yes
keep_tex: yes
number_sections: yes
html_document: null
word_document: null
fontsize: 11pt
documentclass: article
abstract: This is a test. Is this `r mean(x)` working?
---
This is a test of outputing a pdf, with R code interpretted in the YAML front mater. Use case
for this would be a manuscript, with abstract as part of YAML, and some of the results in the
abstract being calculated in the body of the Rmd. For instance:
```r
x<-rnorm(100)
mn<-mean(x)
mn
```
【问题讨论】:
也许是this helps? 我已经看到了,我可以解释 R,但不能利用作为文档正文的一部分创建的 R 对象。所以像:“抽象:这工作:r mean(rnorm(100))
”工作正常。
我明白了。如何使用代码外部化,即带有块的外部 R 文件,首先获取它,然后在文档中再次调用块。或者,使用 brew 进行预处理始终是一种选择。
考虑到我使用的乳胶文件,我认为这些可能是最好的选择。我现在倾向于将摘要从 yaml 中提取出来。我认为这会带来一些问题。
【参考方案1】:
要求
安装 R、knitr 和 yaml:
sudo su -
apt-get install pandoc
apt-get install r
r
url <- "http://cran.us.r-project.org"
install.packages('knitr', repos=url)
install.packages('yaml', repos=url)
创建变量
将变量分离到一个新文件中(例如,v.yaml
):
title: 'How do I interpret R objects in YAML that are created in the document?'
author: Jeff Hollister
output:
pdf_document:
fig_caption: yes
keep_tex: yes
number_sections: yes
html_document: null
word_document: null
fontsize: 11pt
documentclass: article
abstract: This is a test. Is this `r mean(x)` working?
创建脚本
当给定一个 Markdown 格式的文件时,创建一个脚本来加载 knitr、yaml 和变量(例如,knitr.sh
):
#!/bin/bash
R -e \
"library(knitr); library(yaml); v <- yaml.load_file('v.yaml'); knit('$1')"
参考变量
使用 R 语句(内联或其他)引用源文档变量 (document.md
):
# `r v$title`
Author: `r v$author`
运行脚本
通过运行脚本生成 knitr 处理的 Markdown 文件:
./knitr.sh document.md
查看输出
文件document.txt
(重命名是留给读者的问题)应该包含以下Markdown:
# How do I interpret R objects in YAML that are created in the document?
Jeff Hollister
附录
如果 pandoc 需要处理这些变量,使用 shell 脚本魔法将变量插入到生成文件的顶部是相当简单的。如果对 pandoc 的模板使用 YAML 变量,我建议跳过该路线并改用 R 变量。
【讨论】:
【参考方案2】:它不完全与 YAML 相关,并且仅限于乳胶,但也许 this 有帮助。抱歉,帖子是德语的,但代码可能很清楚。
您可以在创建报告时为摘要选择项目;这些项目被写入一个类似于 bibtex 和 biblatex 中使用的方法的临时文件,并在第二步中合并到开头和结尾(用于附录)。
作为一个包,你可以从here下载。
【讨论】:
以上是关于使用 R markdown 和 knitr:可以在 YAML 中解释 R 对象的主要内容,如果未能解决你的问题,请参考以下文章
在 R-Markdown 中使用 knitr 和 kableExtra 的表格单元格中的乳胶公式或符号,
R Markdown、Knitr、Pandoc和Bookdown之间的关系