Подтвердить что ты не робот

R Markdown - имя переменной

С одним файлом разметки R, я хотел бы создать различные возможные выходные документы PDF, где имя выходного файла должно быть определено внутри документа. Есть ли способ убедить уценку манипулировать выходным именем файла таким образом? В идеале я хотел бы передать имя файла r chunk.

4b9b3361

Ответ 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.

Похожие

Ответ 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.

enter image description here

---
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. ....