在 YAML 中使用 R 代码或 Windows 用户变量(“%userprofile%”)?
Use R code or Windows user variable ("%userprofile%") in YAML?
在我的 yaml 调用中我有
---
title: "`r paste0('Test. Done ', format(Sys.Date(), '%B-%Y'))`"
output:
word_document:
fig_caption: yes
fig_height: 4
fig_width: 7
reference_docx: %userprofile%\Documents\template.docx
---
但是 YAML 抱怨 %userprofile%
。是否可以包含这样的变量?
我试过,例如
reference_docx: "`r file.path(path.expand('~'), 'skabelon.docx')`"
但这仍然会导致此 YAML 错误。
pandoc.exe: `r file.path(path.expand('~'), 'skabelon.docx')`: openBinaryFile: does not exist (No such file or directory)
我猜这意味着 r 表达式没有在 yaml 之前处理?我已经检查过文件在那里......或者是因为 pandoc 使用另一个 'userprofile' ?我该如何检查?
不过,我可以根据上面更新的标题在 Title
变量中使用这样的调用。我想这一定是一个特定的 knitr 问题。
您可以包含这样一个变量,但您应该引用放置它的标量(单引号或双引号)。在带引号的标量中,%
没有任何特殊含义,只有单引号具有(在单引号字符串中,或反斜杠 (\
) 在双引号字符串中。
将该标量进一步解释为 Windows 变量超出了 YAML 的范围,需要由您的程序完成。
标量:
"`r file.path(path.expand('~'), 'skabelon.docx')`"
是正确的 YAML,不要抛出错误(当然,对于 YAML 来说,除了一堆以反引号开头和结尾的字符之外别无其他,解析器不应对此进行任何解释)。
问题是 output
字段中的参数只有 rmarkdown 可以理解。 Pandoc 不理解它们,所以你需要确保 rmarkdown 可以计算表达式。由于 rmarkdown 使用 yaml 包来读取 YAML 元数据,并且 yaml 的 R 表达式语法是!expr
,可以把R表达式放在!expr
之后,例如
output:
word_document:
fig_caption: yes
fig_height: 4
fig_width: 7
reference_docx: !expr file.path(Sys.getenv('USERPROFILE'), 'Documents', 'template.docx')
在我的 yaml 调用中我有
---
title: "`r paste0('Test. Done ', format(Sys.Date(), '%B-%Y'))`"
output:
word_document:
fig_caption: yes
fig_height: 4
fig_width: 7
reference_docx: %userprofile%\Documents\template.docx
---
但是 YAML 抱怨 %userprofile%
。是否可以包含这样的变量?
我试过,例如
reference_docx: "`r file.path(path.expand('~'), 'skabelon.docx')`"
但这仍然会导致此 YAML 错误。
pandoc.exe: `r file.path(path.expand('~'), 'skabelon.docx')`: openBinaryFile: does not exist (No such file or directory)
我猜这意味着 r 表达式没有在 yaml 之前处理?我已经检查过文件在那里......或者是因为 pandoc 使用另一个 'userprofile' ?我该如何检查?
不过,我可以根据上面更新的标题在 Title
变量中使用这样的调用。我想这一定是一个特定的 knitr 问题。
您可以包含这样一个变量,但您应该引用放置它的标量(单引号或双引号)。在带引号的标量中,%
没有任何特殊含义,只有单引号具有(在单引号字符串中,或反斜杠 (\
) 在双引号字符串中。
将该标量进一步解释为 Windows 变量超出了 YAML 的范围,需要由您的程序完成。
标量:
"`r file.path(path.expand('~'), 'skabelon.docx')`"
是正确的 YAML,不要抛出错误(当然,对于 YAML 来说,除了一堆以反引号开头和结尾的字符之外别无其他,解析器不应对此进行任何解释)。
问题是 output
字段中的参数只有 rmarkdown 可以理解。 Pandoc 不理解它们,所以你需要确保 rmarkdown 可以计算表达式。由于 rmarkdown 使用 yaml 包来读取 YAML 元数据,并且 yaml 的 R 表达式语法是!expr
,可以把R表达式放在!expr
之后,例如
output:
word_document:
fig_caption: yes
fig_height: 4
fig_width: 7
reference_docx: !expr file.path(Sys.getenv('USERPROFILE'), 'Documents', 'template.docx')