ami*_*mit 13 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 section_data[i]`
#more things go here for the section
#end of loop should go here
Run Code Online (Sandbox Code Playgroud)
结果应该是一个单独的html /文档,所有部分一个接一个.
你能指点我用循环生成这样一个Rmd文件的方法吗?
理想情况下,我希望看到像PHP中的东西:
<$php for(i=0;i<10;i++) { ?>
## some html template + code chunks here
<$php } ?>
Run Code Online (Sandbox Code Playgroud)
CL.*_*CL. 15
这个问题类似于那个问题,虽然它是基于LateX/RNW的.此外,这个答案演示了如何动态生成一个rmarkdown文档.但是,这两个问题都不是这个问题的完全重复.
基本上,有两个心理步骤:
找出每个部分所需的降价标记.这可能是一些事情
## This is section <section_name>
Section data is `<section_data>`.
Additional section text is: <section_text>.
Run Code Online (Sandbox Code Playgroud)编写生成此标记的R代码,用适当的值替换占位符.
对于步骤2,使用sprintf
是组合静态和动态文本的自然候选者.不要忘记使用块选项 results = "asis"
来防止knitr
向输出添加格式并使用cat
(而不是print
)防止R添加其他内容,如引号和元素编号.
我改变所述输入数据结构一点点为清楚起见(使用data.frame
的独立的向量,而不是section_names
和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))
}
```
Run Code Online (Sandbox Code Playgroud)
这是A节
部分数据是
0.83
.附加部分文本是:PUFTZQFCYJFNENMAAUDPTWIKLBSVKWMJWODFHSPRJRROTVDGNEROBVQPLLMVNPOUUHGVGRPMKAOAOMVYXKMGMUHNYWZGPRAWPYLU.这是B节
部分数据是
0.49
.附加部分文本是:PFTYCGFSGSMAYSSCZXWLNLDOQEBJYEVSJIYDJPEPSWQBNWJVRUKBTYIUSTOICFKJFEJCWCAYBCQSRTXUDEQLLXCZNPUKNLJIQJXE.这是C节
部分数据是
0.58
.附加部分文本是:FCJDDDMNLBUSJMCZVSBPYWCKSFJEARBXXFPAGBTKCWKHPEDGYWYTNGLVGQGJAFZRUMNSDCHKTTMGRFNSUZKFLOUGNWHUBNLVMGDB.这是D节
部分数据是
0.52
.附加部分文本是:YQIXHABFVQUAAYZNWTZXJDISSLTZJJAZOLJMJSXEENFTUOFOTYKDNNUMFDXLJSWZEVDLCLSYCTSMEXFLBVQYRTBEVZLCTEBPUGTT.