如何在rmarkdown中使用for循环?

时间:2018-07-05 20:27:36

标签: r r-markdown kable kableextra

考虑以下简单示例:

---
title: "Untitled"
output: ioslides_presentation
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
## Slide with R Output
```{r t,  warning=FALSE, message=FALSE}

library(knitr)
library(kableExtra)
library(dplyr)

for(threshold in c(20, 25)) {
  cars %>% 
    filter(dist < threshold) %>%
    kable('html') %>% 
    kable_styling(bootstrap_options = "striped") 
}
```

在这里,我只想将for loop的每个输出打印到另一张幻灯片中。在此示例中,有两次对kable的调用应该在两张不同的幻灯片上进行。

上面的代码不起作用。我是否为此使用了正确的软件包?有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用asis选项:

---
title: "Untitled"
output: ioslides_presentation
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(knitr)
library(kableExtra)
library(dplyr)
# needed so r will include javascript/css dependencies needed for striped tables:
kable(cars, "html") %>% kable_styling(bootstrap_options = "striped")
```

```{r, results = "asis"}
for (threshold in c(20, 25)) {
  cat("\n\n##\n\n")
  x <- cars %>%
    filter(dist < threshold) %>%
    kable('html') %>%
    kable_styling(bootstrap_options = "striped")
  cat(x)
}
```

答案 1 :(得分:2)

要摆脱该伪造的表,您可以尝试将options(kableExtra.html.bsTable = T)放在设置部分。

答案 2 :(得分:1)

这是解决方案的开始。您可以自己制作字符串,也可以使用pander的{​​{1}}函数通过markdown打印字符串。如果您为该块设置pandoc.*,它将像其他任何降价一样被编译。我使用results="asis"制作了cat标题,但注释了两个##函数,您也可以尝试制作标题或水平尺来分割幻灯片。

有关pander函数here的更多详细信息,以及诸如this one之类的其他SO问题。

pander

一个问题是,当我编织它时,我没有得到您期望的条纹表。如果我在此块之前添加一张幻灯片,并使用这些--- title: "Untitled" output: ioslides_presentation --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE) library(knitr) library(kableExtra) library(dplyr) ``` ```{r, results='asis'} for(threshold in c(20, 25)) { # pander::pandoc.header(sprintf("Threshold = %s", threshold)) # pander::pandoc.horizontal.rule() cat(paste("\n##", "Threshold =", threshold), "\n") tbl <- cars %>% filter(dist < threshold) %>% kable(format = "html") %>% kable_styling(bootstrap_options = "striped") print(tbl) } ``` 设置在其中放置一张桌子,我会得到条纹,但是第一个桌子也很丑陋...我不是确定这是错误还是CSS冲突或其他地方。