r - 使用 knitr 通过循环创建部分
问题描述
请参阅此可重现的示例:
---
title: "test"
output: html_document
---
## foo
```{r}
plot(1:3)
```
## bar
```{r}
plot(4:7)
```
## baz
```{r}
plot(8:12)
```
我希望能够自动创建这些部分,因为在进一步分析之前我不知道它们会有多少。
我得到这个的输入是:
my_list <- list(foo = 1:3, bar = 4:7, baz = 8:12)
my_fun <- plot
my_depth <- 2
理想的答案(尽管我欢迎任何改进)将帮助我构建一个mdapply
函数,以便我可以运行:
```{r}
mdapply(X = my_list, FUN = my_fun, title_depth = my_depth)
```
并获得相同的输出。
解决方案
R 包pander
可以动态生成 Pandoc 的降价。
关键是使用 chunk 选项results='asis'
告诉 R Markdown 将 pander 的输出渲染为 Markdown。您只需要小心生成有效的 Markdown!
尝试这个:
---
title: "Test sections"
output: html_document
---
## A function that generates sections
```{r}
library(pander)
create_section <- function() {
# Inserts "## Title (auto)"
pander::pandoc.header('Title (auto)', level = 2)
# Section contents
# e.g. a random plot
plot(sample(1000, 10))
# a list, formatted as Markdown
# adding also empty lines, to be sure that this is valid Markdown
pander::pandoc.p('')
pander::pandoc.list(letters[1:3])
pander::pandoc.p('')
}
```
## Generate sections
```{r, results='asis'}
n_sections <- 3
for (i in seq(n_sections)) {
create_section()
}
```
它看起来仍然很老套,但 Markdown 有其局限性......
推荐阅读
- python - VSCODE 自动补全在模块 matplotlib.widgets 中找不到类 Slider
- c# - 在使用属性注入时,我们如何知道什么是“本地默认值”?
- swift - 合并:取消一组
或删除其所有存储的对象以停止订阅 - upload - 在 env Gradle7+ 中使用 Mavan-Pulish 上传工件到 Nexus 失败
- python - 如何在 python 中删除表的某些行?
- javascript - React - FlatList extraData 不适用于记忆/纯组件
- javascript - 如何并行运行 2 个等待循环?
- bash - Linux:将file1中的字符id分配给file2的两列,f2_col1和f2_col2,而不改变file2中的行顺序
- python - 如何在数据框中查找特定值并返回索引?
- google-analytics - 标签没有被触发,因为我滚动时加载了该项目