R Markdown - variable output name

后端 未结 4 688
粉色の甜心
粉色の甜心 2020-12-04 10:57

With one R markdown file, I would like to create different possible output pdf documents, where the output file name should be defined within the document. Is there any way

4条回答
  •  执笔经年
    2020-12-04 11:46

    You can keep the simplicity of using the RStudio Knit button and reproducibility of a YAML header by using the undocumented knit hook to redefine what the button does (default function called is rmarkdown::render). The output_file parameter of the render function specifies the file name, so by setting it you override the standard behaviour of using the same prefix as the input filename.

    e.g. to always output a file called myfile.pdf

    knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, output_file = file.path(dirname(inputFile), 'myfile.pdf')) })
    

    The function can be an anonymous one-liner as well as imported from a package, as seen here with slidify.

    You can set your own YAML headers (I don't know if this is generally advised anyway), accessible under rmarkdown::metadata$newheader but they don't seem available from within this sort of function as far as I can see.

    As for passing file name in from an R chunk... if you're referring to code chunks below the YAML header, from my experience I don't think that's possible(?). Headers can contain inline R commands (single backtick-enclosed, starting with r), but seemingly not for this hook function.

    Related:

    • Rmarkdown GitHub repo issue — output format-specific output_file
    • Blog post I wrote following this question on more elaborate uses of the knit: hook / corresponding GitHub wiki notes

提交回复
热议问题