Как использовать цикл для в rmarkdown? - PullRequest
0 голосов
/ 05 июля 2018

Рассмотрим этот простой пример:

---
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 голосов
/ 06 июля 2018

Вот начало решения. Вы можете печатать строки с уценкой, либо создавая их самостоятельно, либо используя pander 'pandoc.* функции. Если вы установите results="asis" для этого чанка, он будет скомпилирован так же, как и любая другая уценка. Я использовал cat для создания заголовков ##, но прокомментировал две pander функции, которые вы также можете попробовать сделать заголовками или горизонтальными правилами для разделения слайдов.

Более подробно о pander функциях здесь , а также других SO-вопросах, таких как this .

---
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)
}
```

Одна проблема заключается в том, что когда я вяжу это, я не получаю полосатый стол, который вы ожидаете. Если я добавлю слайд перед этим блоком и добавлю в него таблицу с этими настройками kableExtra, я делаю получаю полосы, но первая таблица тоже довольно уродливая ... Я не уверен, что это ошибка или конфликтующие CSS где-то или что.

0 голосов
/ 17 июля 2018

Чтобы избавиться от этой фиктивной таблицы, вы можете попытаться поместить options(kableExtra.html.bsTable = T) в раздел настроек.

0 голосов
/ 06 июля 2018

Вы можете использовать опцию 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)
}
```
...