使用 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 【问题描述】:

我正在使用knitrR 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之间的关系

knitr Markdown 在 Emacs 中突出显示?

使用knitr和pandoc转换为PDF时markdown中的图形位置

R markdown 默认设置

R markdown 默认设置