【问题标题】:is it possible to supply argument when running Rmarkdown in the command line?在命令行中运行 Rmarkdown 时是否可以提供参数?
【发布时间】:2017-07-14 14:04:52
【问题描述】:

我正在尝试基于模板创建不同的报告集。

  1. 是否可以从命令行运行此报告,而不是通过 RStudio (knit PDF) 运行它?

  2. 我有一个名为 app 的向量,我在其中为每个应用程序运行此报告并输出值。从命令行运行此报告时,是否可以通过命令行选项提供应用程序?我需要知道是否可以将其作为参数提供,而不是在 Rmarkdown 中使用应用程序?

  3. 每次我运行这个,pdf文件名都是一样的。如何更改此设置以使 pdf 文件名与应用程序值相同?


    title: "Application Report"
    
    date: "July 13th, 2017"
    header-includes:
       - \usepackage{longtable}
       - \usepackage[table]{xcolor}
       - \usepackage{colortbl}
       - \usepackage[utf8]{inputenc}
    output:
      pdf_document:
        fig_caption: yes
        fig_height: 6
        fig_width: 7
        highlight: zenburn
        number_sections: yes
        toc: yes
        toc_depth: 3
    keep_tex: yes
    tables: yes
    fontsize: 15
    ---
    
    ```{r message=FALSE, results = 'asis', echo=FALSE, warning=FALSE, fig.width=12, fig.height=10}
    
    app<-c("Web","DB)
    
    
    for (i in app){
    
        cat(paste("# ",app, " - Application","\n"))
    }
    

【问题讨论】:

  • 探索params 选项。

标签: r knitr r-markdown


【解决方案1】:

简短回答:

  1. 是的
  2. 是的
  3. 是的

示例:我将使用两个文件和一个命令行示例。使用 makefile 或扩展 knit-application-report.R 脚本将简化您的工作流程。

第一个文件:application-report.Rmd 我已经从你的示例文件中简化了这篇文章。重要的是要定义变量app。此变量将用于报表标题,并可在报表的其他地方使用。

---
title: "`r app` Report"
date: "`r date()`"
output: pdf_document
---

This is the report for the `r app` application.

```{r}
# do stuff
```

文件 2:knit-application-report.RcommandArgs 的调用,使用 trailingOnly = TRUE 将命令行参数传递到 R 脚本。应用程序的名称作为第一个也是唯一的参数传入。该值存储在 app 变量中,然后将在调用 rmarkdown::render 时使用该变量,并在评估 .Rmd 文件时使用。

# file: knit-application-report.R
#
# Commandline Arguments:
# 1. appliction a character string for the app

app <- commandArgs(trailingOnly = TRUE)

rmarkdown::render(input = "application-report.Rmd",
                  output_file = paste0(app, ".pdf")) 

命令行看起来像这样(来自我的 linux 命令行)。

me@mycomputer:~$ Rscript knit-application-report.R MyApplication


processing file: application-report.Rmd
  |................................                                 |  50%
   inline R code fragments

  |.................................................................| 100%
label: unnamed-chunk-1

output file: application-report.knit.md

/usr/bin/pandoc +RTS -K512m -RTS application-report.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output MyApplication.pdf --template /home/pdewitt/R-dev/R-3.4.1/library/rmarkdown/rmd/latex/default-1.17.0.2.tex --highlight-style tango --latex-engine pdflatex --variable graphics=yes --variable 'geometry:margin=1in'

Output created: MyApplication.pdf

请注意,输出是命名报告MyApplication.pdf,如下所示:

【讨论】:

  • 这真的很棒。如何在 rmarkdown 的块中使用应用程序? r{}
  • 块选项是 R 表达式。例如,您可以设置echo = app == "MyApplication",以仅针对“MyApplication”回显该块,并禁止所有其他应用程序的报告中的代码。
  • 我需要在块中引用应用程序。如何在 r 块中引用 app 的值?
  • app 是工作区中的变量。您可以像使用任何其他变量一样使用它。 if (app == "MyApplication") { } else { } 可用于控制给定应用程序在块中完成的操作。
最近更新 更多