我可以动态创建rmarkdown文档吗?

时间:2016-04-11 19:37:45

标签: r knitr r-markdown

我想根据用户的输入创建一个不同的rmarkdown模板。就我而言,是一个描述数据集的文档。如果有人有20个变量,那么应该有20个带有这些变量名称的标题。然后它打开该模板以允许用户添加更多信息。

我的意思并不是parameterized reports

是否可以使用sink()?

的组合

更新了更实用的示例

我的想法是拥有一组函数,每个变量执行一些汇总, f.i.对于数值变量的平均值,中位数等,对于因子变量,是因子的概述。我可以编写所有这些函数,我可以制作一个rmarkdown文档,但我真正喜欢的是这样的。

数据集一 letters numbers factors a 10 orange b 3 green c 6 verydarkblue

使用rmarkdown文件

This dataset has 3 variables with some properties
*information for author*
add information about where you found the data what the properties
are and add some background information to the variables.

\newpage
### letters
letters has [some code that executes summary function for letters]

### numbers 
numbers has [some code for numeric variables]

如果变量的数量不同,模板会有所不同

1 个答案:

答案 0 :(得分:1)

我可能会从knitr包开始,它已经完成了你想做的一些事情。然后创建一个输出类型设置为"asis"的代码块,以便告诉knitr将结果直接放在输出文件中而不添加任何标记,然后您的代码可以插入相应的标记,只需循环通过数据集并为每列输出### columnname,然后输入相应的摘要信息。

代码块可能类似于:

```{r, results="asis"}
for( i in seq_len(ncol(dataset)) ) {
  cat("### ", names(dataset)[i], "\n\n")
  if(class(dataset[[i]]) == 'numeric') {
    cat(mean(dataset[[i]]),'\n')
  } else if(class(dataset[[i]])=='factor') {
    print(table(datset[[i]]))
  } else {
    cat('Something Else\n\n')
  }
}
```