Экспортирование всех элементов в списке столбцов с использованием `employee`
Я работаю над отчетом, для которого мне нужно экспортировать большое количество похожих фреймов данных в красивые таблицы в Word. Мне удалось до первого бита, сгенерировав список столбцов flextable
объекты, использующие purrr
( ТАК вопрос для справки).
Теперь я хотел бы записать все сгенерированные таблицы в одном документе, который для одного 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.
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()
Совет: не используйте имена функций для сохранения объектов. Таким образом, я переименовал list
в list1
, Идея состоит в том, чтобы использовать цикл и всегда сохранять в один и тот же документ, добавляя разрыв страницы.
Или попробуйте 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()