2015-08-06 3 views
22

У меня есть шаблон Rmarkdown, который хорошо работает, и я его параметризую, чтобы я мог генерировать варианты одного и того же отчета из разных источников данных. Однако я хотел бы изменить заголовок отчета в каждом случае. Как мне это сделать?Настройка заголовка документа в Rmarkdown из параметров

Вот заголовок YAML я до сих пор:

--- 
title: "My Title" 
author: "Me, Inc." 
date: "August 4, 2015" 
output: pdf_document 
params: 
    title: default 
--- 

Я попытался с помощью params=list(title="ASDF") в вызове rmarkdown::render, и хотя мой код может видеть, что переменная, это не меняет название. Я также пытался использовать r params$title в YAML, но это дает синтаксическую ошибку.

Есть ли что-то еще, что я должен попробовать? Благодаря!

ответ

41

Попробуйте использовать второй блок метаданных YAML и поместите там параметризованные метаданные.

Я получил следующий код, чтобы работать, как ожидалось (то есть, производя название документа из списка Params):

--- 
output: html_document 
params: 
    set_title: "My Title!" 
--- 

--- 
title: `r params$set_title` 
--- 

В RMarkdown documentation отмечает, что YAML блоки метаданных, объединенные Pandoc. Используйте первый блок для определения набора параметров, а второй - для использования параметров в качестве метаданных. Knitr выполнит код R для интерпретации параметров во втором блоке. Затем Pandoc объединит блоки метаданных.

Update (2017):

Это может быть выполнено в виде одного блока, например, так:

--- 
output: html_document 
params: 
    set_title: "My Title!" 
title: "`r params$set_title`" 
--- 

Это работает потому, что название происходит после params определения. Я помещаю кавычки вокруг встроенного R-кода, чтобы предотвратить «ошибки сканера».

+9

Вы можете сделать это с помощью одного блока YAML, пока 'title: ...' приходит * после * объявления 'params'. – eipi10

+4

Если вы получите «Ошибка сканера», вам могут потребоваться кавычки с обеих сторон обратных точек (т. Е. Введите значение для синтаксического анализа YAML). – blmoore

+4

В этом примере «My Title!» это текстовая строка. Как бы вы это изменили, если хотите, чтобы название было создано динамически на основе переменной в данных (которая может меняться в зависимости от источника этих данных)? –

1

Добавление этого ответа, поскольку оно помогает в создании динамических названий R-уценок.

Просто используйте! R, за которым следует имя объекта (test_title в приведенном ниже примере), чтобы сделать динамическое название.

--- 
output: pdf_document 
params: 
set_title: !r test_title 
--- 
--- 
title: `r params$set_title` 
--- 
Смежные вопросы