使用循环生成rmarkdown中的文本部分
我需要生成一个由几个部分组成的报告,所有部分看起来都很相似,只是数据上有一些差异。节数也取决于数据。我最终想要的是这样的东西:使用循环生成rmarkdown中的文本部分,r,knitr,r-markdown,R,Knitr,R Markdown,我需要生成一个由几个部分组成的报告,所有部分看起来都很相似,只是数据上有一些差异。节数也取决于数据。我最终想要的是这样的东西: ```{r} section_names = c("A","B","C") section_data = c(13,14,16) ``` # some looping mechanism here with variable i This is section `r section_names[i]` This section's data is `r s
```{r}
section_names = c("A","B","C")
section_data = c(13,14,16)
```
# some looping mechanism here with variable i
This is section `r section_names[i]`
This section's data is `r section_data[i]`
#more things go here for the section
#end of loop should go here
结果应该是一个单独的html/文档,包含一个接一个的所有部分
你能告诉我一种使用循环生成这样一个Rmd文件的方法吗
理想情况下,我希望在PHP中看到类似的内容:
<$php for(i=0;i<10;i++) { ?>
## some html template + code chunks here
<$php } ?>
这个问题类似于,尽管它是基于LateX/RNW的。此外,演示了如何动态生成rmarkdown文档。然而,这两个问题都不是这个问题的完全重复
基本上,需要采取两个心理步骤:
- 找出每个部分所需的降价标记。这可能是类似于
## This is section <section_name>
Section data is `<section_data>`.
Additional section text is: <section_text>.
输出:
这是A区
截面数据为0.83
。
附加章节文本为:PuftzQfcyjfnenmaaudptwiklbsvkwmjwodfhsprjrrotvdgnerobvqpllmvnpouhgvgrpmkaoomvyxkmgmuhnywzgprawpylu
这是B部分
截面数据为0.49
。
附加章节文本为:PFTYCGFSMSMAYSSCZWLNLDOQEBJYEVSJIYDJPEPSWQBNWJVRUKBYUSTOICFKJFEJCWCAYBCQSRTXUDEQLXCZNPUKNLJIQJXE
这是C部分
截面数据为0.58
。
附加章节文本为:fcjddmnlbusjmczvsbpywcksjearbxxfpagbtkcwkhpedgyytnglvgqgjafzrumnsdchktmgrfnsuzkflougnwhubnlvmgdb
这是D部分
截面数据为0.52
。
附加章节文本为:YQIXHABFVQUAYZNWTZXJDISLTZJJAZLJMJSXENFTUOFOTYKDNNUMFDXLJSWZEVDLCLSYCTSMEXFLBVQYRTBEVZLCTEBPUGTT
只是分享我最终使用的方法
我为这个部分写了一个降价文件。为主控文档中的每个部分准备数据,并循环遍历我需要的所有部分,每次使用Rmd部分调用knit_child()。我知道这太晚了,但我在代码中使用它来制作编号的部分,效果很好
for (k in 1:length(listcsv)){ #Begin Loop at pdf file one and continue until all have been completed
subsection <- paste("5", k, sep = ".")}
for(k in 1:length(listcv)){#从pdf文件1开始循环,并继续循环,直到完成所有操作
小节在这种情况下,“section”是什么意思?它只是一块要插入的文本?还是每个名称对应一块文本?可能是@Ben的副本不完全相同。在你提到的帖子中,问题是关于生成多个pdf文档。我感兴趣的是基于数据的同一报告的结构,也就是说,生成为许多部分都需要(基于数据)。类似,但不重复。@Heroka有一堆文本,可能的代码块需要一个接一个地“编织”几次,每次都使用稍微不同的数据。我编辑了我的问题,以澄清这一点,当然,这是可行的,但它实际上是在编程解决方案,而不是“模板化”它。Rmarkdown之美(我自己的观点)是指它不需要编程就可以创建一个简单的文档模板,只使用编程来计算文档所需的数据。这可能是一个风格问题。最终,我用另一种方式解决了这个问题。请看下面的答案。@amit我倾向于不同意。在你的问题中,文档的全部内容都是数据。因此,很自然re有很多“处理数据”/编程和少量纯文本。但是“模板化”“部分也在那里:查看我的变量模板…无论如何,我很快就会看到你的解决方案。@阿米特好,阅读你的解决方案。从技术上讲,它非常相似。我的模板是你的子文档。我的sprintf
是你的knit\u孩子。我同意这种相似性,只是我对它非常敏感。”“关注点分离”的问题,所以我不喜欢我的模板被编程,而是真正的文档。同样,这是一个品味的问题。另外,虽然从我的简单示例看不明显,但真正的使用要求每个部分都相当大(超过3个句子,更像3-4页的文本、图表)-所以额外的RMD文件更有意义,我认为。@amit使用更复杂的模板,我完全同意。仅使用简单的模板,子文档的额外复杂性(另一个RMD->MD->include步骤)不值得分离关注点优势,IMHO。
for (k in 1:length(listcsv)){ #Begin Loop at pdf file one and continue until all have been completed
subsection <- paste("5", k, sep = ".")}