1

我正在编写一份报告,我必须将大量类似的数据框导出到 Word 中漂亮的表格中。flextable我通过使用purrrSO question for reference)生成对象的列列表来管理第一位。

现在我想将所有生成的表格写入一个 word 文档,对于单个flextable对象,可以使用以下过程完成:

library(tidyverse)
library(flextable)
library(officer)

# Basic data frame
df <- data.frame(school = c("A", "B", "A", "B", "A", "B"),
        students = c(round(runif(6, 1, 10), 0)),
        grade = c(1, 1, 2, 2, 3, 3))

# Generating column list containing flextable objects
list <- df %>% 
    group_by(school) %>%
    nest() %>% 
    mutate(ftables = map(data, flextable))

# Exporting single flextable object into Word
read_docx() %>% body_add_flextable(list$ftables[[2]]) %>% print("path")

我显然想避免对所有行都这样做ftables,重要的是,所有表都应该连续写入同一个 Word 文档。

我玩弄了purrr函数和编写循环,但最远的我将表格写入单独的 Word 文档。

4

1 回答 1

1

你可以试试

my_doc <- read_docx()
for(i in seq_along(list1$ftables)){
  my_doc <- body_add_flextable(my_doc,list1$ftables[[i]]) %>% 
    body_add_break() 
}
print(my_doc, target = "Doc.docx") %>% invisible()

提示,不要使用函数名来保存对象。因此,我重命名listlist1. 这个想法是使用循环并通过添加分页符始终保存到同一个文档。

或尝试purrr解决方案:

# build a function to write a function
write_word_table <- function(var, doc){
  doc %>%
    body_add_flextable(var) %>% 
    body_add_break() }

my_doc <- read_docx()
# use walk (the invisible function of map) to include all tables in one doc
walk(list1$ftables, write_word_table, my_doc) 
print(my_doc, target = "Doc1.docx") %>% invisible()
于 2018-01-24T14:30:42.897 回答