Несколько Flextables в блоке RMarkdown (с echo = F) не отображаются - PullRequest
0 голосов
/ 02 апреля 2019

Я использую R 3.5.1 на ОС Windows 7 x64. Мои версии пакета:
гибкий стол: 0.5.1
офицер: 0.3.2
Тидиверс: 1.2.1
тидир: 0,8,2

Я пытаюсь создать, а затем распечатать несколько гибких таблиц в одном фрагменте Word. Я также не хочу фактический код R в Word Doc, поэтому я установил echo = FALSE. Однако я столкнулся с чем-то странным.

Если я использую следующий код (echo = T):

```{r, echo = F, warning=FALSE, message=FALSE}
library(tidyverse)
library(flextable)
library(officer)
```

```{r, echo = T}
iris_data <- head(iris, n = 10)
iris_data_ft <- iris_data %>% flextable() %>%
    hline(part = 'header', border = fp_border(color = "black", width = 3)) %>%
    align(align ='center', part = 'all') %>%
    align(j = 1, align ='left', part = 'all') %>%
    add_header_lines('this is a test')
iris_data_ft

iris_data2 <- tail(iris, n = 10)
iris_data2_ft <- iris_data2 %>% flextable() %>%
    hline(part = 'header', border = fp_border(color = "black", width = 3)) %>%
    align(align ='center', part = 'all') %>%
    align(j = 1, align ='left', part = 'all') %>%
    add_header_lines('this is a test')
iris_data2_ft
```

Я получаю следующий вывод правильных гибких таблиц в Word: enter image description here

Если я использую точно такой же код, но с echo = F:

```{r, echo = F}
iris_data <- head(iris, n = 10)
iris_data_ft <- iris_data %>% flextable() %>%
    hline(part = 'header', border = fp_border(color = "black", width = 3)) %>%
    align(align ='center', part = 'all') %>%
    align(j = 1, align ='left', part = 'all') %>%
    add_header_lines('this is a test')
iris_data_ft

iris_data2 <- tail(iris, n = 10)
iris_data2_ft <- iris_data2 %>% flextable() %>%
    hline(part = 'header', border = fp_border(color = "black", width = 3)) %>%
    align(align ='center', part = 'all') %>%
    align(j = 1, align ='left', part = 'all') %>%
    add_header_lines('this is a test')
iris_data2_ft
```

Я получаю в Word следующее (это продолжается для 58 страниц): flextablesEchoF

Наконец, если я разделю один чанк для двух гибких таблиц на два отдельных чанка и установлю echo = F:

```{r, echo = F}
iris_data <- head(iris, n = 10)
iris_data_ft <- iris_data %>% flextable() %>%
    hline(part = 'header', border = fp_border(color = "black", width = 3)) %>%
    align(align ='center', part = 'all') %>%
    align(j = 1, align ='left', part = 'all') %>%
    add_header_lines('this is a test')
iris_data_ft
```

```{r, echo = F}
iris_data2 <- tail(iris, n = 10)
iris_data2_ft <- iris_data2 %>% flextable() %>%
    hline(part = 'header', border = fp_border(color = "black", width = 3)) %>%
    align(align ='center', part = 'all') %>%
    align(j = 1, align ='left', part = 'all') %>%
    add_header_lines('this is a test')
iris_data2_ft
```

Таблицы отображаются очень хорошо: flextablesEchoFtwoChunks

Хотя я не против разделить гибкие таблицы на разные части, мне интересно, почему это происходит. Любое руководство будет с благодарностью. Спасибо!

1 Ответ

1 голос
/ 02 апреля 2019

Вот обходной путь:



---
title: "Untitled"
output: word_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(flextable)
```

```{r echo=FALSE, results='asis'}
library(htmltools)
ft <- flextable(head(iris))
for(i in 1:3){
  cat("```{=openxml}\n")
  cat(format(ft, type = "wml"), "\n")
  cat("```\n")
}
```

...