这个问题类似于that one https://stackoverflow.com/questions/31817908/create-pdf-using-rhtml-and-iterate-over-data-frame,尽管它是基于 LateX/RNW 的。除了,这个答案 https://stackoverflow.com/a/35092679/2706569演示如何动态生成 rmarkdown 文档。然而,这两个问题都不是与这个问题完全相同的。
基本上,需要采取两个心理步骤:
对于步骤 2,使用sprintf https://stat.ethz.ch/R-manual/R-devel/library/base/html/sprintf.html是结合静态和动态文本的自然候选者。不要忘记使用块选项 http://yihui.name/knitr/options/ results = "asis"
阻止knitr
从添加格式到您的输出并使用cat
(代替print
)以防止 R 添加额外的内容,例如引号和元素编号。
为了清楚起见,我稍微改变了输入数据结构(使用data.frame
而不是独立向量section_names
and section_data
).
```{r echo = FALSE, results = "asis"}
input <- data.frame(
name = LETTERS[1:4],
data = runif(n = 4),
text = replicate(4, paste(sample(x = LETTERS, size = 100, replace = TRUE), collapse = "")),
stringsAsFactors = FALSE)
template <- "## This is section %s
Section data is `%0.2f`.
Additional section text is: %s.
" # dont't forget the newline
for (i in seq(nrow(input))) {
current <- input[i, ]
cat(sprintf(template, current$name, current$data, current$text))
}
```
Output:
这是A部分
部分数据是0.83
。
附加部分文本为:PUFTZQFCYJFNENMAAUDPTWIKLBSVKWMJWODFHSPRJRROTVDGNEROBVQPLLMVNPOUUHGVGRPMKAOAOMVYXKMGMUHNYWZGPRAWPYLU。
这是B部分
部分数据是0.49
。
附加部分文本为:PFTYCGFSGSMAYSSCZXWLNLDOQEBJYEVSJIYDJPEPSWQBNWJVRUKBTYIUSTOICFKJFEJCWCAYBCQSRTXUDEQLLXCZNPUKNLJIQJXE。
这是C部分
部分数据是0.58
。
附加部分文本为:FCJDDDMNLBUSJMCZVSBPYWCKSFJEARBXXFPAGBTKCWKHPEDGYWYTNGLVGQGJAFZRUMNSDCHKTTMGRFNSUZKFLOUGNWHUBNLVMGDB。
这是D部分
部分数据是0.52
。
其他部分文本为:YQIXHABFVQUAAYZNWTZXJDISSLTZJJAZOLJMJSXEENFTUOFOTYKDNNUMFDXLJSWZEVDLCLSYCTSMEXFLBVQYRTBEVZLCTEBPUGTT。