Rmarkdown: разные выходные папки, общие библиотеки

У меня есть файл .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(базовый путь, каталог):

Путь C:/Users/ac/Dropbox/2014_07_WIP/pub/libs/jquery-1.11.0 не является потомком C:/Users/ac/Dropbox/2014_07_WIP/Monkey/

Поэтому я предполагаю, что rmarkdwown::render сначала создает каталоги lib относительно файла Rmd, но ожидаю, что файлы будут размещены относительно выходных файлов.

Как я могу обойти это, чтобы иметь набор общих входных файлов 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

person Andreas    schedule 07.07.2014    source источник


Ответы (1)


Я решил свою насущную проблему, передав часть основного материала в вызове рендеринга:

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 в выходном файле связан с разделителем окон ("\") и, следовательно, не может использоваться, например. Fire Fox.

person Andreas    schedule 08.07.2014