【发布时间】: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