如何在 rmarkdown 中使用 for 循环?
how to use a for loop in rmarkdown?
考虑这个简单的例子:
---
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
应该在两张不同的幻灯片上进行。
上面的代码不起作用。我什至为此使用了正确的软件包吗?有什么想法吗?
谢谢!
您可以使用 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)
}
```
这里是解决方案的开始。您可以通过自己制作字符串或使用 pander
的 pandoc.*
函数来使用 markdown 打印字符串。如果您为该块设置 results="asis"
,它将像任何其他降价一样被编译。我使用 cat
来制作 ##
标题,但注释掉了两个 pander
函数,您也可以尝试制作 headers 或水平规则来拆分幻灯片。
pander
函数有更多详细信息 here, plus other SO questions such as this one。
---
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)
}
```
一个问题是,当我编织这个时,我没有得到您期望的条纹 table。如果我在这个块之前添加一张幻灯片,并使用这些 kableExtra
设置将 table 放入其中,我 do 得到条纹,但第一个 table也很丑陋......我不确定这是一个错误还是冲突CSS某处或什么。
要摆脱那个伪造的 table,您可以尝试将 options(kableExtra.html.bsTable = T)
放在您的设置部分。
考虑这个简单的例子:
---
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
应该在两张不同的幻灯片上进行。
上面的代码不起作用。我什至为此使用了正确的软件包吗?有什么想法吗?
谢谢!
您可以使用 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)
}
```
这里是解决方案的开始。您可以通过自己制作字符串或使用 pander
的 pandoc.*
函数来使用 markdown 打印字符串。如果您为该块设置 results="asis"
,它将像任何其他降价一样被编译。我使用 cat
来制作 ##
标题,但注释掉了两个 pander
函数,您也可以尝试制作 headers 或水平规则来拆分幻灯片。
pander
函数有更多详细信息 here, plus other SO questions such as this one。
---
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)
}
```
一个问题是,当我编织这个时,我没有得到您期望的条纹 table。如果我在这个块之前添加一张幻灯片,并使用这些 kableExtra
设置将 table 放入其中,我 do 得到条纹,但第一个 table也很丑陋......我不确定这是一个错误还是冲突CSS某处或什么。
要摆脱那个伪造的 table,您可以尝试将 options(kableExtra.html.bsTable = T)
放在您的设置部分。