我有一个.R
文件,其中我为列表中的每个唯一值,呈现了许多不同的.Rmd
文件。像这样:
for (uddannelse in unique(c("Monkey","Horse"))) {
rmarkdown::render("file1.Rmd", output_dir=file.path(getwd(), uddannelse) ,output_file=paste("file1", uddannelse,".html", sep="_"), encoding="UTF-8")
rmarkdown::render("file2.Rmd", output_dir=file.path(getwd(), uddannelse), output_file=paste("file2", uddannelse,".html", sep="_"), encoding="UTF-8")
}
如渲染参数所示,html输出应该进入列表中每个值的单独文件夹,在上例中:文件夹:“Monkey”和文件夹“Horse”。
每个.Rmd
文件都有以下前提(文件转到静态html网站,需要self_contained: false
:
---
output:
html_document:
theme: readable
self_contained: false
lib_dir: pub/libs
css: pub/libs/custom_css/custom.css
date: "`r format(Sys.time(), '%d %B, %Y')`"
---
然而:当我调用渲染函数时,我收到了这个错误:
relativeTo(basepath,dir)出错:
路径C:/Users/ac/Dropbox/2014_07_WIP/pub/libs/jquery-1.11.0似乎不是C的后代:/ Users / ac / Dropbox / 2014_07_WIP / Monkey /
所以我想rmarkdwown::render
首先创建相对于Rmd文件的lib目录,但期望文件相对于输出文件放置。
我如何解决这个问题,以便我可以在一个文件夹中拥有一组常见的Rmd输入文件,并在不同的文件夹中输出,但共享一个公共的库?
我试图将这样的东西放在前面。
---
output:
html_document:
theme: readable
self_contained: false
lib_dir: "`r file.path(uddannelse, "libs")`"
css: "`r file.path(uddannelse, "libs", "custom_css", "custom.css")`"
date: "`r format(Sys.time(), '%d %B, %Y')`"
---
我收到了这个错误:
Error in yaml::yaml.load(front_matter) :
Parser error: while parsing a block mapping at line 3, column 5did not find expected key at line 5, column 50
答案 0 :(得分:2)
我通过传递渲染调用中的一些前端问题来解决我的直接问题:
rmarkdown::render("file1.Rmd",
output_dir=file.path(uddannelse),
output_file=paste("file1", uddannelse,".html", sep="_"),
output_options=list(html_document =
list(self_contained = FALSE,
lib_dir = file.path(uddannelse, "lib"),
css = paste("lib", "custom_css", "custom.css",
sep="/"),
include = list(
after_body = file.path(uddannelse,
"footer_w_index.html")))),
encoding="UTF-8")
请注意,lib_dir
必须与Rmd
文件相关,css
必须与输出文件相关。
出于某种原因 - 无论我使用paste
还是file.path(fsep="/", ...)
,输出文件中的css
路径都与Windows分隔符(“\”)链接 - 因此无法用于例如Firefox浏览器。