【问题标题】:Multiple Flextables in RMarkdown chunk (with echo = F) do not renderRMarkdown 块中的多个 Flextables(带有 echo = F)不呈现
【发布时间】:2019-04-02 14:30:21
【问题描述】:

我在 OS Windows 7 x64 上使用 R 3.5.1。 我的包版本是:
弹性表:0.5.1
官员:0.3.2
tidyverse:1.2.1
整洁:0.8.2

我正在尝试在单个块中创建多个弹性表并将其打印到 Word。我也不想要 Word Doc 中的实际 R 代码,所以我设置了 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 中得到以下正确弹性表的输出:

如果我使用完全相同的代码,但使用 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 页):

最后,如果我将两个弹性表的一个块分成两个单独的块并设置 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
```

表格渲染得很好:

虽然我不介意将弹性表分成不同的块,但我想知道为什么会这样。任何指导将不胜感激。谢谢!

【问题讨论】:

    标签: flextable


    【解决方案1】:

    这里有一个解决方法:

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

    【讨论】:

    • 这也不起作用,没有表输出。生成一个以“无标题”为唯一内容的 word 文档
    • 这个答案现在已经过时了。循环打印见?flextable::flextable_to_rmd
    【解决方案2】:

    我想这个问题已经用新版本的 flextable 解决了。如果我将两个块之后的代码放入一个 .Rmd 文档并按字排列,它可以毫无问题地编译并显示表格,即使用echo = F 放入一个块中也是如此。只是想补充一下:在某些情况下,将results='asis' - 'as is'-选项(原始 Markdown 解析) - 添加到您的块头以防止解析表时出错,检查:bookdown.org/results-as-is 可能会有所帮助。

    ```{r, echo = F, warning=FALSE, message=FALSE}
    library(tidyverse)
    library(flextable)
    library(officer) 
    ```
    
    ```{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
    ```
    

    【讨论】:

    • 试着把你的答案放到一个循环中,你会发现它不起作用
    • 我做到了,它确实有效。请分享您的错误消息。
    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多