将参数传递给R Markdown

10

我试图根据以下教程在R Markdown中创建参数化报告:http://rmarkdown.rstudio.com/developer_parameterized_reports.html#passing-parameters

我正在尝试使用render从r控制台传递文件路径作为参数。就像这样:

render('rmarkdownfile.rmd',params= list( client= "clientdata.csv"))

我的Markdown文件看起来像这样:

title: "Liquidity Report"
output: pdf_document
params: client:"clientdata.csv"
---
```{r plot, echo=FALSE, warning=FALSE}
cftest <- read.csv(params$client)

但是我收到了一个错误,它说:

read.table(file=file, header=header, sep=sep, quote=quote,)中的错误:'file'必须是字符字符串或连接。调用:

看起来 Markdown 没有识别参数,尽管我按照教程的步骤进行操作。是否有人能够成功地在 R Markdown 中使用参数?

另外,我正在遵循教程的建议,并使用 R Studio 预览以及最新版本的 r markdown 和 knitr。

谢谢您的帮助!

Rafael

2个回答

16

我想要做的不只是在我的参数化报告中指定一个文件名,还要指定一个目录。

---
title: Liquidity Report
date: '`r strftime(Sys.time(), format = "%B %d, %Y")`'
output:
  pdf_document:
    number_sections: yes
    theme: cerulean
    toc: yes
    toc_depth: 2
params:
  directory:
    value: x
  file:
    value: x
---

```{r, include = FALSE}
knitr::opts_chunk$set(
      echo    = FALSE
    , warning = FALSE
    , message = FALSE
)

## Pull in the data
dataset <- read.csv(file.path(params$directory, params$file))
```

然后在您的渲染函数中,您可以:

rmarkdown::render(
      input  = 'LiquidityReport.Rmd'
    , params = list(
          directory = '~/path/to/data'
        , file      = 'clientdata.csv'
        )
)

knitr 的文档可以提供更多信息:> ?knitr::knit_params


谢谢!看起来是一个很好的方法。我会试一下。 - Rafael Velásquez
我想在同一份报告中使用所有文件:Rscript -e“rmarkdown :: render('./testreport.Rmd',params = list(directory ='/ PATHTO / geneticstuff /', lqual ='finches_stats.lqual', ldepth.mean ='finches_stats.ldepth.mean', lmiss ='finches_stats.lmiss', fq ='finches_stats.frq', idepth ='finches_stats.idepth', imiss ='finches_stats.imiss'))" - M. Beausoleil
1
好的!我想我明白了:参数: 目录: 值:x lqual: 值:x ldepth.mean: 值:x lmiss: 值:x fq: 值:x idepth: 值:x imiss: 值:x这些被放在不同的行上。因此,您可以将每个“文件”用作新的params$file放入R脚本中! - M. Beausoleil
1
我建议将paste函数更改为file.path - M. Beausoleil
1
value: x 行是默认值。在这种情况下,我使用 x 来创建一个占位符,并确保呈现调用在没有有效的目录和文件路径的情况下失败。 - Paul James
显示剩余3条评论

9
在我的情况下,它起作用了,只需要更改头文件中的缩进和一些在我的文件夹中可用的名称... 在这里是我的 jnk.Rmd
---
title: "Liquidity Report"
output: pdf_document
params: 
  client: "NAMESPACE"
---
```{r plot, echo=FALSE, warning=FALSE}
cftest <- read.csv(params$client)
```

这是我在控制台中输入的命令:render('jnk.Rmd',params= list( client= "NAMESPACE"))


这对我也很好用。顺便说一下,在YAML头中文件名周围不需要引号。@Rafael,你确定clientdata.csv文件与你的.Rmd文件在同一个目录下吗? - Tutuchan
实际上,脚本抱怨变量的内容(必须是字符),而不是关于不存在的文件... - drmariod
非常感谢!那个完美地解决了问题。我在这方面还很新,没有想到缩进会有如此大的影响。 - Rafael Velásquez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接