【问题标题】:Can i create rmarkdown documents dynamicaly?我可以动态创建 r markdown 文档吗?
【发布时间】:2016-04-11 19:37:45
【问题描述】:

我想根据用户的输入创建一个不同的 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]

如果变量个数不同,模板也会不同

【问题讨论】:

  • 嗯,您可以使用cat 将任何内容写入文件,或者使用package:brew 制作模板,您可以使用R 对象填充这些模板。有没有更具体的例子说明你想做什么?
  • 我认为我们大约在 5 年前开始为 rapporter.net 提供支持的 rapport package 可能适合您的需求。虽然它现在还没有进行大量开发,但已在许多生产环境中使用。

标签: r knitr r-markdown


【解决方案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')
  }
}
```

【讨论】:

  • 这看起来很有希望,我会做一些测试并报告回来。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 2015-09-30
  • 2010-09-05
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
相关资源
最近更新 更多