【发布时间】:2018-05-19 04:01:05
【问题描述】:
我正在构建一个广泛使用子文档的报告基础结构(通过{r, child = 'somedir/child_doc.Rmd'}),并通过主文档的YAML 标题中的params 字典进行参数化。一个例子可能是:
---
title: Project Report
subtitle: POIGNANT DESCRIPTION OF THE WORK AT HAND
date: '`r format(Sys.time(), "%d %B, %Y")`'
output:
bookdown::pdf_document2:
template: ~
toc: yes
toc_depth: 2
colorlinks: yes
fontsize: 11pt
documentclass: scrartcl
geometry: margin=1in, a4paper
params:
submodule:
value:
intro:
data_dir: 'data'
---
使用这种结构,访问data_dir 会出现问题,因为主文档和子文档的工作目录不同,因此相对路径定义也不同。出路是:
在定义
data_dir时使用绝对/扩展路径名。 快速变长/笨拙。-
params对象的后处理以扩展主文档中的路径。由于params在从R块中访问时是不可变的,因此只能以不优雅 的方式解决:```{r params-processing, include = FALSE} local_params <- params local_params$submodule$intro$data_dir <- path.expand(local_params$submodule$intro$data_dir)随后是内部使用
local_params而不是params。 在
YAML标头中定义参数时,使用类似!R path.expand('data')的方式就地扩展路径。虽然这(或基于 ` 的等效项)适用于示例中的data字段,但knitring 在路径情况下 fails 因为R表达式是 not em> 扩展但用作字符表示 - 文字"path.expand('data')"显然不作为路径存在。
我很感激任何关于如何巧妙地解决这个问题的提示 - 特别是 3. 是否可以工作......
【问题讨论】:
标签: r yaml knitr r-markdown bookdown