在循环内交错 R Markdown 中的表格和绘图

Mar*_*ler 6 loops r knitr r-markdown

我有一个 R Markdown/knittr 文档,可以生成成对的图和表格。对的数量是可变的,因此我在循环内创建它们。 我希望结果在输出中交错:表 1、图 1、表 2、图 2...

在下面的示例中,所有表格都首先出现在文档的顶部。我尝试过各种排列

  • pander 或 kable 作为我的餐桌功能
  • 将表函数包装在打印中或将其保留
  • 有或没有结果='asis'

编辑:我找到了一个解决方案并将其发布在下面。现在我正在寻找一个与我在循环内的自定义 R Markdown 绘图大小中收到的出色的可变高度建议兼容的一个?

```{r cars, echo=FALSE}
library(ggplot2)
library(knitr)

carb.possibilities <- sort(unique(as.character(mtcars$carb)))

filtereds <- lapply(carb.possibilities, function(carb.ct) {
  return(mtcars[ mtcars$carb == carb.ct , ])
})

carb.possibilities <- paste(carb.possibilities, ' Carburetors', sep = '')

names(filtereds) <- carb.possibilities

lapply(carb.possibilities, function(one.possibility) {

  current.possibility <- filtereds[[one.possibility]]

  print(kable(current.possibility))

  ggplot(current.possibility, aes(factor(gear), mpg)) + 
    coord_flip() + 
    labs(x = "Gears", title = one.possibility) +
    geom_point(position=position_jitter( width = 0.1, height = 0.1) ) 
})
```
Run Code Online (Sandbox Code Playgroud)

Mar*_*ler 1

使用 asis,将表格和绘图包装在 print() 中并进行换行可以解决交错问题。我还没有\xe2\x80\x99t 想出如何将其与循环内自定义 R Markdown 绘图大小的可变高度图结合起来

\n\n

参见https://github.com/yihui/knitr/issues/886

\n\n
```{r cars, echo=FALSE, results=\'asis\'}\nlibrary(ggplot2)\nlibrary(knitr)\n\ncarb.possibilities <- sort(unique(as.character(mtcars$carb)))\n\nfiltereds <- lapply(carb.possibilities, function(carb.ct) {\n  return(mtcars[ mtcars$carb == carb.ct , ])\n})\n\ncarb.possibilities <- paste(carb.possibilities, \' Carburetors\', sep = \'\')\n\nnames(filtereds) <- carb.possibilities\n\nfor(one.possibility in carb.possibilities){\n\n  current.possibility <- filtereds[[one.possibility]]\n\n  my.ggplot <- ggplot(current.possibility, aes(factor(gear), mpg)) +\n    coord_flip() +\n    labs(x = "Gears", title = one.possibility) +\n    geom_point(position=position_jitter( width = 0.1, height = 0.1) )\n\n  print(kable(current.possibility))\n\n  cat(\'\\n\')\n\n  print(my.ggplot)\n\n}\n```\n
Run Code Online (Sandbox Code Playgroud)\n