2015-08-06 15 views
22

Tôi đã có mẫu Rmarkdown hoạt động tốt và tôi đã tham số hóa nó để tôi có thể tạo các biến thể của cùng một báo cáo từ các nguồn dữ liệu khác nhau. Tuy nhiên, tôi muốn thay đổi tiêu đề của báo cáo trong từng trường hợp. Làm thế nào để làm điều đó?Đặt tiêu đề tài liệu trong Rmarkdown từ tham số

Đây là tiêu đề YAML tôi có cho đến nay:

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

Tôi đã cố gắng sử dụng params=list(title="ASDF") trong cuộc gọi đến rmarkdown::render, và mặc dù mã của tôi có thể thấy rằng biến, nó không thay đổi tiêu đề. Tôi cũng đã thử sử dụng r params$title trong YAML, nhưng điều đó đưa ra một lỗi cú pháp.

Có điều gì khác mà tôi nên thử không? Cảm ơn!

Trả lời

41

Cố gắng sử dụng khối siêu dữ liệu YAML thứ hai và đặt siêu dữ liệu tham số trong đó.

Tôi đã nhận mã sau đây để làm việc như mong đợi (ví dụ, tạo ra một tiêu đề tài liệu từ danh sách các params):

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

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

Các RMarkdown documentation ghi chú rằng YAML khối siêu dữ liệu được kết hợp bởi Pandoc. Sử dụng khối đầu tiên để xác định tập tham số và khối thứ hai sử dụng tham số làm siêu dữ liệu. Knitr sẽ thực thi mã R để giải thích các tham số trong khối thứ hai. Sau đó Pandoc sẽ hợp nhất các khối siêu dữ liệu với nhau.

Update (2017):

Điều này có thể được thực hiện trong một khối duy nhất, như vậy:

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

này hoạt động bởi vì tiêu đề ra sau khi định nghĩa params. Tôi đặt dấu ngoặc kép xung quanh mã R trong dòng để ngăn chặn "Lỗi máy quét".

+9

Bạn thực sự có thể làm điều đó với một khối YAML duy nhất miễn là 'tiêu đề: ...' đến * sau * khai báo 'params'. – eipi10

+4

Nếu bạn gặp lỗi 'Lỗi máy quét', bạn có thể cần dấu ngoặc kép ở hai bên phía sau (ví dụ: làm cho giá trị là một chuỗi cho trình phân tích cú pháp YAML). – blmoore

+4

Trong ví dụ này "Tiêu đề của tôi!" là chuỗi văn bản. Làm thế nào bạn sẽ thay đổi điều này nếu bạn muốn tiêu đề được tạo tự động dựa trên một biến trong dữ liệu (có thể thay đổi tùy thuộc vào nguồn dữ liệu đó)? –

1

Thêm câu trả lời này vì nó giúp tạo tiêu đề đánh dấu R động.

Chỉ cần sử dụng! R theo sau là tên đối tượng được xác định (test_title trong trường hợp bên dưới) để làm tiêu đề động.

--- 
output: pdf_document 
params: 
set_title: !r test_title 
--- 
--- 
title: `r params$set_title` 
--- 
Các vấn đề liên quan