将多个表格和图表的列表导出到 pdf 和 excel 文件中
Export a list of multiple tables and plots into a pdf and an excel file
我有一个数据集存储在数据框中。我从这个数据集中生成 2 个矩阵和 2 个 ggplots 对象,然后将它们存储在一个列表中。在某些情况下,这些对象之一的输出为空。无论输出如何,我都无法将其保存为 pdf 文件(一页上的所有 4 个对象)。
该文件结束时为空且大小为 3kb。
"It may be damaged or use a file format that Preview doesn’t recognize."
请在下面找到我的代码:
audience_summary<-function(df){
#cities<-unique(df$Account.name)
cities=c('AMIENS','TOULOUSE','NANCY')
do.call(file.remove, list(list.files("output/", full.names = TRUE)))
list_pages<-list()
counter=1
for (i in cities){
subset_df<-filter(df,Account.name==i)
audience_list<-unique(subset_df$Ad.set.name)
for (a in audience_list){
subset_df1<-filter(subset_df,Ad.set.name==a)
subset_post<-filter(subset_df1,medium=='post')
subset_video<-filter(subset_df1,medium=='video')
post_dataset<-NULL
video_dataset<-NULL
fig_post<-NULL
fig_video<-NULL
if(nrow(subset_post)>0){
post_dataset<-audience_dataset(subset_post,months_list,'post')
fig_post<-audience_plot(df,'post')
}
if(nrow(subset_video)>0){
video_dataset<-audience_dataset(subset_video,months_list,'video')
fig_video<-audience_plot(df,'video')
}
one_page<-list()
one_page[[1]]<-fig_post
one_page[[2]]<-post_dataset
one_page[[3]]<-fig_video
one_page[[4]]<-video_dataset
revised_page<-list()
page_counter<-1
for (z in 1:length(one_page)){
if (!is.null(one_page[[z]])){
revised_page[[page_counter]]<-one_page[[z]]
page_counter=page_counter+1
}
}
print(counter)
#list_pages[[counter]]<-revised_page
write_to_pdf(paste(a,'-',i),revised_page)
counter=counter+1
}
}
#return(list_pages)
staplr::staple_pdf(input_directory='output',
output_filepath=paste0('Summary_Analysis_',Sys.Date(),'.pdf'),
overwrite=TRUE)
}
write_to_pdf<-function(filename,array_of_objects) {
pdf(paste0('output/',filename,'.pdf'), width=8, height=11)
for (o in 1:length(array_of_objects)){
print(array_of_objects[[o]])
dev.off()
}
audience_results<-audience_summary(revised_filtered)
我希望在 pdf 页面和 excel sheet 页面上输出 revised_page。
感谢您的帮助。
请在下面找到数据集
summary(revised_filter)
Ad.set.name Account.name Post.engagement.rate reported_date Platform
Length:30 Length:30 Min. :0.001642 Length:30 Length:30
Class :character Class :character 1st Qu.:0.152426 Class :character Class :character
Mode :character Mode :character Median :0.318894 Mode :character Mode :character
Mean :0.346229
3rd Qu.:0.545346
Max. :0.714029
更新
我找到了 pdf 的解决方案,但仍然希望获得导出到 excel
的解决方案
我能够解决有关创建 pdf 文件的问题。
我最终使用了库 ggpubr 中的 ggpubr::ggarrange(plotlist=revised_page)
if(typeof(object)=='character',那是一个矩阵table,我用的是ggtexttable(object)。
这个 link 真的很有用。
http://www.sthda.com/english/articles/24-ggpubr-publication-ready-plots/81-ggplot2-easy-way-to-mix-multiple-graphs-on-the-same-page/
page_counter<-1
for (z in 1:length(one_page)){
if (is.null(one_page[[z]])){}
else{
if(typeof(one_page[[z]])=='character'){
revised_page[[page_counter]]<-ggtexttable(one_page[[z]],theme = ttheme("mOrange"))
}
if(typeof(one_page[[z]])[1]=='list'){
revised_page[[page_counter]]<-one_page[[z]]
}
page_counter=page_counter+1
}
}
numberofiems<-length(revised_page)
output_page<-ggarrange(plotlist=revised_page,ncol=1,nrow=numberofiems)
print(counter)
list_pages[[counter]]<-output_page
write_to_pdf2(paste(a,'-',i),output_page)
我简化了 pdf 函数来处理我的代码
write_to_pdf2<-function(filename,one_page){
pdf(paste0('output/',filename,'.pdf'), width=8, height=12)
print(one_page)
dev.off()
}
我有一个数据集存储在数据框中。我从这个数据集中生成 2 个矩阵和 2 个 ggplots 对象,然后将它们存储在一个列表中。在某些情况下,这些对象之一的输出为空。无论输出如何,我都无法将其保存为 pdf 文件(一页上的所有 4 个对象)。 该文件结束时为空且大小为 3kb。 "It may be damaged or use a file format that Preview doesn’t recognize."
请在下面找到我的代码:
audience_summary<-function(df){
#cities<-unique(df$Account.name)
cities=c('AMIENS','TOULOUSE','NANCY')
do.call(file.remove, list(list.files("output/", full.names = TRUE)))
list_pages<-list()
counter=1
for (i in cities){
subset_df<-filter(df,Account.name==i)
audience_list<-unique(subset_df$Ad.set.name)
for (a in audience_list){
subset_df1<-filter(subset_df,Ad.set.name==a)
subset_post<-filter(subset_df1,medium=='post')
subset_video<-filter(subset_df1,medium=='video')
post_dataset<-NULL
video_dataset<-NULL
fig_post<-NULL
fig_video<-NULL
if(nrow(subset_post)>0){
post_dataset<-audience_dataset(subset_post,months_list,'post')
fig_post<-audience_plot(df,'post')
}
if(nrow(subset_video)>0){
video_dataset<-audience_dataset(subset_video,months_list,'video')
fig_video<-audience_plot(df,'video')
}
one_page<-list()
one_page[[1]]<-fig_post
one_page[[2]]<-post_dataset
one_page[[3]]<-fig_video
one_page[[4]]<-video_dataset
revised_page<-list()
page_counter<-1
for (z in 1:length(one_page)){
if (!is.null(one_page[[z]])){
revised_page[[page_counter]]<-one_page[[z]]
page_counter=page_counter+1
}
}
print(counter)
#list_pages[[counter]]<-revised_page
write_to_pdf(paste(a,'-',i),revised_page)
counter=counter+1
}
}
#return(list_pages)
staplr::staple_pdf(input_directory='output',
output_filepath=paste0('Summary_Analysis_',Sys.Date(),'.pdf'),
overwrite=TRUE)
}
write_to_pdf<-function(filename,array_of_objects) {
pdf(paste0('output/',filename,'.pdf'), width=8, height=11)
for (o in 1:length(array_of_objects)){
print(array_of_objects[[o]])
dev.off()
}
audience_results<-audience_summary(revised_filtered)
我希望在 pdf 页面和 excel sheet 页面上输出 revised_page。 感谢您的帮助。
请在下面找到数据集
summary(revised_filter)
Ad.set.name Account.name Post.engagement.rate reported_date Platform
Length:30 Length:30 Min. :0.001642 Length:30 Length:30
Class :character Class :character 1st Qu.:0.152426 Class :character Class :character
Mode :character Mode :character Median :0.318894 Mode :character Mode :character
Mean :0.346229
3rd Qu.:0.545346
Max. :0.714029
更新 我找到了 pdf 的解决方案,但仍然希望获得导出到 excel
的解决方案我能够解决有关创建 pdf 文件的问题。 我最终使用了库 ggpubr 中的 ggpubr::ggarrange(plotlist=revised_page) if(typeof(object)=='character',那是一个矩阵table,我用的是ggtexttable(object)。 这个 link 真的很有用。 http://www.sthda.com/english/articles/24-ggpubr-publication-ready-plots/81-ggplot2-easy-way-to-mix-multiple-graphs-on-the-same-page/
page_counter<-1
for (z in 1:length(one_page)){
if (is.null(one_page[[z]])){}
else{
if(typeof(one_page[[z]])=='character'){
revised_page[[page_counter]]<-ggtexttable(one_page[[z]],theme = ttheme("mOrange"))
}
if(typeof(one_page[[z]])[1]=='list'){
revised_page[[page_counter]]<-one_page[[z]]
}
page_counter=page_counter+1
}
}
numberofiems<-length(revised_page)
output_page<-ggarrange(plotlist=revised_page,ncol=1,nrow=numberofiems)
print(counter)
list_pages[[counter]]<-output_page
write_to_pdf2(paste(a,'-',i),output_page)
我简化了 pdf 函数来处理我的代码
write_to_pdf2<-function(filename,one_page){
pdf(paste0('output/',filename,'.pdf'), width=8, height=12)
print(one_page)
dev.off()
}