参数化报告,从路径读取和创建多个输出

时间:2017-02-24 02:42:32

标签: r r-markdown

对于我想稍后手动输入的给定路径,我希望R生成与该目录中的.csv文件一样多的报告。

---
output: html_document
params:
  directory:
    value: x
---

```{r, echo = F}
csvs <- list.files(params$directory, pattern = "\\.csv$")
done <- list.files(params$directory, pattern = "analysis_")

name_csv <- substr(csvs, 1, nchar(csvs)-4) # .csv
name_done <- substr(done, 19, nchar(done)-5) # .html
selected_csv <- csvs[min(which(!(name_csv %in% name_done )))]

.
.
.
```

我尝试做的是选择哪个csv尚未通过匹配进行分析,如果它们具有相同的文字。 .csv具有唯一的名称,因此如果我有unique1.csvanalysis_unique1.html,则代码会跳过并转到unique2.csv

这第一部分已经使我的代码失败了。我明白了:

  

对象[seq_len(ile)]出错:     对象类型&#39;符号&#39;不是子集表格

当我尝试从&#34;外部&#34;访问某些内容时,我试图删除这部分代码并遇到同样的问题。例如,我的代码在尝试加载包时也会中断。甚至以后,当我尝试做read.csv时(我手动编写了csv名称)。

```{r, echo = F}
data <- read.csv(selected_csv)
```

虽然即使是基本的rmarkdown::render("file.Rmd")也无法正常工作,但我尝试做的完整渲染是:

for(i in 1:length(list.files(pattern = "\\.csv$"))){
  rmarkdown::render( 
  input="file.Rmd", 
  output_file= paste('analysis_', substr(
  list.files(pattern = "\\.csv$")[i], 1, nchar(selected_csv)-4), sep = ' '), 
  params = "ask") 
}

虽然我不确定nchar(selected_csv)部分是否可行,因为它引用Rmdfile

无论如何,这是我做这件事的蹩脚尝试。

1 个答案:

答案 0 :(得分:0)

并不完全清楚你想要实现的目标。

下面的代码片段将列出每个csv文件,检查html文件是否存在,如果不存在,则渲染html文件

lapply(list.files(pattern = "\\.csv$"), function(x) {
    outhtml <- paste0("analysis_",basename(x),".html")
    if (!file.exists(outhtml)) {
        rmarkdown::render("file.Rmd", "html_document", outhtml)
    }
})

HTH