С одним файлом разметки R, я хотел бы создать различные возможные выходные документы PDF, где имя выходного файла должно быть определено внутри документа. Есть ли способ убедить уценку манипулировать выходным именем файла таким образом? В идеале я хотел бы передать имя файла r chunk.
R Markdown - имя переменной
Ответ 1
Вы можете сохранить простоту использования кнопки RStudio Knit
и воспроизводимости заголовка YAML, используя недокументированный крюк Knit
, чтобы переопределить, что делает кнопка (функция по умолчанию - rmarkdown::render
). Параметр output_file
функции рендеринга указывает имя файла, поэтому, установив его, вы переопределяете стандартное поведение с использованием того же префикса, что и имя входного файла.
например. всегда выводить файл с именем myfile.pdf
knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, output_file = file.path(dirname(inputFile), 'myfile.pdf')) })
Функция может быть анонимным однострочным, а также импортирована из пакета, как показано здесь с помощью slidify.
Вы можете установить свои собственные заголовки YAML (я не знаю, если это вообще рекомендуется), доступный под rmarkdown::metadata$newheader
, но они, похоже, не доступны из этой функции, насколько я могу видеть.
Что касается передачи имени файла из фрагмента R... если вы имеете в виду куски кода ниже заголовка YAML, из моего опыта я не думаю, что это возможно (?). Заголовки могут содержать встроенные R-команды (одна обратная сторона в комплекте, начиная с r
), но, похоже, не для этой функции hook.
Похожие
- Проблема с репозиторией Rmarkdown GitHub - формат вывода
output_file
- Сообщение в блоге, которое я написал после этого вопроса в более сложных целях использования
knit:
hook/Вики-заметки GitHub
Ответ 2
Это в значительной степени то, что я делаю:
rmarkdown::render('my_markdown_report.Rmd',
output_file = paste('report.', Sys.Date(),
'.pdf', sep=''))
У меня есть три сценария: один вытягивает данные и обрабатывает их, второй создал диаграммы и таблицы для отчета. Третий создает отчет, основанный на файле уценки. Код, который вы видите выше, является частью третьего script
Ответ 3
Следуя за тем, что написал @ilya, на этой веб-странице есть отличный пример, демонстрирующий то, что они описывают, а именно, как создать несколько воспроизводимых отчетов из того же документа .Rmd:
http://www.reed.edu/data-at-reed/software/R/markdown_multiple_reports.html
Веб-страница использует два сценария: один R script и один Rmarkdown script для создания нескольких отчетов. Я использовал его как шаблон для своей собственной работы и нашел его очень полезным.
Ответ 4
пытаясь изменить имя выходного файла, используя информацию из файла .rmd.
Если следующее: knit: (function(inputFile, encoding) { rmarkdown::render(inputFile,encoding=encoding, output_file='bar.html') })
находится в верхнем заголовке YAML, это работает, но не может получить доступ код из файла .rmd. Если я добавлю тот же блок ко второму блоку YAML в конце, он не будет работать, хотя я могу изменить заголовок таким образом. Смотрите следующие примеры. Любая помощь приветствуется.
Это работает (но не решает проблему):
---
output: html_document
knit: (function(inputFile, encoding) { rmarkdown::render(inputFile,encoding=encoding, output_file='bar.html') })
---
''' {r, include=FALSE}
my_file <- "Foo"
my_output_file <- paste(my_file, ".html", sep = "")
'''
---
title: 'r my_file'
---
Это не:
---
output: html_document
---
''' {r, include=FALSE}
my_file <- "Foo"
my_output_file <- paste(my_file, ".html", sep = "")
'''
---
title: 'r my_file'
knit: (function(inputFile, encoding) { rmarkdown::render(inputFile,encoding=encoding, output_file='bar.html') })
---
Спасибо за любую помощь, которую вы можете предложить.
Ответ 5
Мой лучший обходной путь (пока)
увидеть полную историю в стеке
Я поиграл с крючком Knitr, не понимая, как он работает, и наткнулся на уродливый обходной путь. Приведенная ниже кодировка, кажется, делает свое дело. Было бы хорошо, если бы кто-то мог объяснить, почему это работает, и/или если он может быть написан менее уродливо.
Пока я потерял блестящий экран ввода, но верю, что это можно добавить позже. Хорошо, что кнопка R-Studio Knit все еще может быть использована.
Обратите внимание, что подзаголовок и имя файла оба: это работает! даже с пробелом и восклицательным знаком. Файл сохраняется как This Works!.Pdf
Имя файла и субтитры устанавливаются путем назначения текста объекту pSubTitle. Обратите внимание, что параметры все еще находятся в YAML, но не приводят к блестящему всплывающему экрану, поскольку они назначены в крюке Knitr.
---
params:
sub_title:
input: text
label: Sub Title
value: 'my_Sub_Title_and_File_Name'
title : "Parameterized_Title_and_output_file"
subtitle : "'r params$sub_title'"
output:
pdf_document:
keep_tex: false
knit: (
function(inputFile, encoding) {
pSubTitle <- 'This Works!'
rmarkdown::render(
input = inputFile,
encoding = encoding,
params = list(sub_title = pSubTitle),
output_file = pSubTitle) })
---
'''{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
'''
## R Markdown
This is an R Markdown document. ....