我想在R中的for
循环内为data.frame
s的list
自动生成R markdown块和标题,长度根据输入而变化。这些是绘图生成的输入。然后使用knitr
包将此R markdown文档编织到html_document
中。
我已经尝试了几个类似的SO问题的解决方案,这些问题可以让我接近,但不是我实际需要的:
- https://stackoverflow.com/a/44671368/10771401
- https://stackoverflow.com/a/57034752/10771401
- 问题**是我有4个块要重复,每个块必须有 * 不同的 * 块选项(
fig.width
,fig.height
)才能正确显示其中的ggplot2
对象。所以,我不能简单地在代码块本身提供一组选项。
- 问题**是我有4个块要重复,每个块必须有 * 不同的 * 块选项(
下面是我的一次失败尝试的示例(注意:下面的第二个代码块还包含指示所需的块选项的注解):
# Chunk data demo
data_list <- list(a=data.frame(), b=data.frame(), c=data.frame())
plot_1 <- list()
plot_2 <- list()
for (i in 1:length(data_list)) {
data_list[[i]] <- data.frame(x = 1:5, y = 1:5)
plot_1[[i]] <- ggplot(data_list[[i]], aes(x, y)) + geom_point()
plot_2[[i]] <- ggplot(data_list[[i]], aes(x, y)) + geom_point()
}
#```{r, results='asis'} (Start of R markdown chunk)
# Chunk generation (only 2 chunks are written for brevity)
for (i in 1:length(data_list)) {
# Section heading
cat("\n\n")
cat("##", names(data_list)[i])
# Chunk 1 ----
cat("\n\n")
cat("### Sub-section 1")
cat("\n\n")
cat("**Title 1**")
cat("\n\n")
cat('```{r, fig.width=10, fig.height=10}')
cat("\n\n")
print(plot_1[[i]])
cat("\n\n")
cat('```')
# Chunk 2 ----
cat("\n\n")
cat("### Sub-section 2")
cat("\n\n")
cat("**Title 2**")
cat("\n\n")
cat('```{r, fig.width=10, fig.height=3}') # NOTE: Change in option
cat("\n\n")
print(plot_2[[i]])
cat("\n\n")
cat('```')
cat("\n\n")
}
#``` (End of R markdown chunk)
- 编辑:删除
ggsave()
调用,因为没有必要说明编织文件中明显的问题。*
2条答案
按热度按时间6pp0gazn1#
我知道你想做什么,我认为你采取的方法不会起作用。(但我猜你已经知道了!)以下是原因:
当你运行
asis
块时,你产生的是Markdown,而不是R Markdown。fig.width
和fig.height
选项需要由knitr
在处理R Markdown
时处理,但这只发生一次。处理Markdown的下一个阶段由Pandoc完成,它不知道fig.width
和fig.height
的任何信息。所以你需要做的就是生成一个“子文档”,然后让
knitr
把它包含在你的主文档中,这些内容如下所述:https://bookdown.org/yihui/rmarkdown-cookbook/child-document.html。基本上,它们只是R Markdown的一部分,需要包含在主文档中。下面是对文档的修改:R Markdown
wljmcqd82#
也可以使用
knitr::knit_expand()
并将其传递给knitr::knit_child()
函数。