【问题标题】:RMarkdown Parameterise a ReportRMarkdown 参数化报告
【发布时间】:2016-10-18 13:21:39
【问题描述】:

我在 R 中有一个生成图表并包含一些文本的报告。文本包含对前一周的引用,该引用本身基于数据框

我无法让它运行。下面是代码。有没有人看到问题

我收到以下错误消息

yaml::yaml.load(enc2utf8(string), ...) 中的错误: 扫描仪错误:在第 5 行第 9 列的上下文中不允许映射值 调用:... yaml_load_utf8 -> mark_utf8 -> -> .Call 执行停止

---
title: "Foo"
author: "John Smith"
date: "18 October 2016"
output: word_document
  params:
  weeknr: !r max(data$WEEKNRs)
---

```{r}

# creates the dataframe referenced in the header
source('transform.R')

```

All,

Please find below [attached](www.stackexchange.com) report for week ``r params$weeknr``

【问题讨论】:

  • 您的全球环境中的数据是偶然的吗?您需要在 Markdown 文档本身中创建数据。 Rmarkdown 被构建为一个自包含的脚本,因此不会将其他脚本写入的对象拉到全局环境中。换句话说,除非使用渲染函数调用 Rmarkdown,否则您不能在参数部分中使用对象。
  • 尝试将 weeknr 设置为任意值,然后调用 render(rmarkdowndoc.rmd,params=(weeknr=max(data$WEEKNRs))
  • 嗨@Morgan,变量本身基本上在数据框data中的最后一周。通过采购 transform.R 它应该创建数据框并将其存储在文件中吗? Rmarkdown 能把它捡起来吗?在您的第二条评论中,因此这些信息会被放入 R 块中?
  • 是的,您可以使用 source 将其拉入您的 Rmarkdown 中。然后,您可以将 Max(data$WEEKNRs) 分配给一个对象并在您的 Rmarkdown 中使用它。但是你不能在 params 部分使用它。
  • 如果 transform.R 返回数据,那么你可以这样做:weeknr: !r max(source(transform.R)$WEEKNRs) 或者如果 transform.R 返回一个列表weeknr: !r max(source(transform.R)[[1]]$WEEKNRs),它可能需要这样

标签: r parameters r-markdown


【解决方案1】:

你得到的错误是因为你在 word_document 后面的行上缩进了params:

标题中可能有代码,但您需要以不同的格式对其进行格式化,请参阅 YAML current date in rmarkdown

在您的情况下,您可以使用类似的东西(使用标题标签以便能够轻松查看结果):

---
title:  "`r source('transform.R'); max(data$WEEKNRs)`"
---

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 2016-08-24
    • 2019-03-14
    • 2018-05-21
    • 1970-01-01
    • 2013-12-18
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多