Докладчики: Добавление регулируемого объекта в презентацию PPTX

У меня возникают проблемы с добавлением флештаба в презентацию PowerPoint с помощью пакета ReporteRs, поскольку имена столбцов, которые я хочу отобразить, синтаксически неверны.

Таким образом, очевидно, что flextable принимает только фреймы данных с синтаксически допустимыми именами столбцов, что, в частности, означает, что имена не могут быть пустыми строками или содержать пробелы. Моим первым решением было просто использовать регулируемую функцию, которая прекрасно работает. Но когда я затем хочу добавить свой регулируемый объект в свою презентацию PowerPoint, он сообщает мне, что я могу добавлять только изменяемые объекты (... и начинается цикличность ...).

Минимальный пример:

x <- c('a', 'b')
y <- c(1, 2)
d <- data.frame(x, y)
names(d) <- c(" ", "this column") #not syntactically valid column names!

#trying to call flextable(d) leads to an error
#so, try to use regulartable:
table <- regulartable(x)

#now try to create a pptx with this:
mySlides <- pptx()
mySlides <- addSlide(mySlides, 'Blank')
mySlides <- addFlexTable(mySlides, flextable = test) #Error: argument flextable must be a FlexTable object.

Кто-нибудь знает, как обойти эту проблему?

Я был бы счастлив, если бы знал, как добавить регулируемый элемент к моим слайдам, или как сделать так, чтобы флештабируемые имена столбцов были пустыми или содержали пробелы.

Заранее благодарю за любую помощь!


person Tom Bombadil    schedule 20.06.2018    source источник


Ответы (1)


flextable предназначен для работы с officer, а не с ReporteRs. Обратите внимание, что пакет ReporteRs будет удален из CRAN 16 июля 2018 г. (из-за несовместимости с java> = 9), пакет officer заменяет ReporteRs.

Ваш код должен выглядеть примерно так:

library(flextable)
library(officer)

x <- c('a', 'b')
y <- c(1, 2)
d <- data.frame(x, y)
names(d) <- c(" ", "this column") #not syntactically valid column names!
table <- regulartable(d)

ppt <- read_pptx()
ppt <- add_slide(ppt, layout = "Title and Content", master = "Office Theme")
ppt <- ph_with_flextable(ppt, value = table, type = "body") 

print(ppt, target = "example.pptx")

По поводу названий столбцов. Вам не нужно изменять имена ваших data.frame только для их отображения. Для этого вы можете использовать разные функции:

library(flextable)
library(officer)

x <- c('a', 'b')
y <- c(1, 2)
d <- data.frame(x, y)

meta <- data.frame(
  col_keys = c("x", "y"), 
  upper_labels = c("hi", "world"), 
  labels = c(" ", "this column"), 
  stringsAsFactors = FALSE)

table <- regulartable(d)
table <- set_header_df( table, mapping = meta )

d <- data.frame(a = x, b = y)# must not contain x as set_header_labels first arg is also x...
ft <- regulartable(d)
ft <- set_header_labels( ft, a = "", b = "this column" )

ppt <- read_pptx()
ppt <- add_slide(ppt, layout = "Two Content", master = "Office Theme")
ppt <- ph_with_flextable(ppt, value = table, type = "body", index = 1) 
ppt <- ph_with_flextable(ppt, value = ft, type = "body", index = 2) 

print(ppt, target = "example.pptx")
person David Gohel    schedule 20.06.2018
comment
Большое спасибо за полезный ответ! - person Tom Bombadil; 21.06.2018
comment
В чем причина наличия и flextable(), и regulartable()? Что, кроме поддержки несинтаксических имен, может одно, чего не может сделать другой? Вывод для flextable(head(iris)) кажется идентичным regulartable(head(iris)), за исключением того, что первый наследует класс complextable, а второй _6 _... - person C8H10N4O2; 18.10.2018
comment
Предлагаю вам прочитать первые абзацы документации, в которых вы пытаетесь ответить на ваш вопрос: davidgohel.github.io/flextable/articles/ - person David Gohel; 18.10.2018