使用 ReporteRs 包使用 R Shiny 生成 powerpoint 幻灯片
Posted
技术标签:
【中文标题】使用 ReporteRs 包使用 R Shiny 生成 powerpoint 幻灯片【英文标题】:Generate powerpoint slides with R Shiny using ReporteRs package 【发布时间】:2016-07-19 23:38:41 【问题描述】:我有一个闪亮的 R 代码,可以制作各种报告、词云、情绪分析和其他各种东西。现在我希望通过单击一个按钮,所有这些生成的报告都可以一次性下载并附加到 ppt。因此,例如,它应该如下所示:
幻灯片1:词云
幻灯片 2:情绪分析
幻灯片 3:报告 1 ...等等
到目前为止,我可以单独下载所有这些报告,即我在我的 Shiny UI 中有不同的选项卡,对于每个报告,我转到它并单击“下载”,它会被 downloadHandler 下载。
此外,只需单击一下,我就可以将所有这些报告下载到一个 pdf 中,即在一页中我有报告 1 等等。
到目前为止,我已经达到了以下:
#downloadReport is my action button
#on click of this button I am expecting the ppt. to be downloaded
observeEvent(input$downloadReport,
# Create a PowerPoint document
doc = pptx( )
# Slide 1 : Title slide
#+++++++++++++++++++++++
doc <- addSlide(doc, "Title Slide")
doc <- addTitle(doc,"Create a PowerPoint document from R software")
doc <- addSubtitle(doc, "R and ReporteRs package")
# Slide 2 : Add Word Cloud
#+++++++++++++++++++++++
doc <- addSlide(doc, "Title and Content")
doc <- addTitle(doc, "Bar Plot")
newData=rawInputData(); # Function which captures data (.csv file) when I have input it through R shiny
words_list = strsplit(as.character(newData$CONTENT), " ") #CONTENT is the column which contains the test data
words_per_tweet = sapply(words_list, length)
pptwordcloud<-barplot(table(words_per_tweet), border=NA,main="Distribution of words per tweet", cex.main=1,col="darkcyan")
#pptwordcloud<-barplot(table(words_per_tweet), col="darkcyan")
doc <- addPlot(doc, fun= print, x = pptwordcloud,vector.graphic =FALSE )
writeDoc(doc,'file1.pptx')
)
ppt。正在生成,但我无法通过使用vector.graphic =FALSE
作为选项在其中看到条形图。如果我删除它,我会收到此错误
警告:观察者中未处理的错误: javax.xml.bind.UnmarshalException - 带有链接异常:[org.xml.sax.SAXParseException:根元素之前的文档中的标记必须格式正确。] 观察事件(输入$下载报告)
谁能指出我的错误。
【问题讨论】:
@Batanichek:我意识到我的错误,现在我使用 addPlot() 只是因为我的 worddownload() 函数正在渲染绘图。进行这些更改后,我遇到了新错误。请查看已编辑的问题 所以让我们看看你的函数返回了什么(在简单的 r 会话中不是闪亮的)——在我的 null (data(crude) tdm <- TermDocumentMatrix(crude) m<-as.matrix(tdm); word.freq<-sort(rowSums(m),decreasing=TRUE); minimum=4 p<-wordcloud(words=names(word.freq),freq=word.freq,min.freq=minimum,random.order=FALSE,colors=brewer.pal(8, "Dark2"),main="Title") p
) 中。所以在功能上将绘图保存为 png 和 addImage 可能会更好?
在 addPlot.pptx 中你可以看到“fun --plot 函数。该函数将被执行以生成图形。对于网格或格子或 ggplot 对象,该函数应该只是 print 和一个额外的参数 x应指定要绘制的对象。对于传统绘图,该函数应包含绘图说明。请参阅示例。"
@Batanichek:谢谢!!问题得到解决。它奏效了。
如果回答解决了你的问题,接受它=)
【参考方案1】:
让我们尝试重现 =)
1) 我没有您的数据,所以我使用 iris
并选择用于选择第二列的输入 table
用户界面
library(shiny)
shinyUI(
# Use a fluid Bootstrap layout
fluidPage(
selectInput("sel",label = "col",choices = colnames(iris)[2:ncol(iris)]),
downloadButton('downloadData', 'Download')
)
)
服务器
library(shiny)
library(DT)
library(ReporteRs)
shinyServer(function(input, output,session)
output$downloadData <- downloadHandler(
filename = "file.pptx",
content = function(file)
doc = pptx( )
# Slide 1 : Title slide
#+++++++++++++++++++++++
doc <- addSlide(doc, "Title Slide")
doc <- addTitle(doc,"Create a PowerPoint document from R software")
doc <- addSubtitle(doc, "R and ReporteRs package")
# Slide 2 : Add Word Cloud
#+++++++++++++++++++++++
doc <- addSlide(doc, "Title and Content")
doc <- addTitle(doc, "Bar Plot")
#newData=rawInputData(); # Function which captures data (.csv file) when I have input it through R shiny
#words_list = strsplit(as.character(newData$CONTENT), " ") #CONTENT is the column which contains the test data
#words_per_tweet = sapply(words_list, length)
words_per_tweet=iris
pptwordcloud<-function()
barplot(table(words_per_tweet[,c("Sepal.Length",input$sel)]), border=NA,main="Distribution of words per tweet", cex.main=1,col="darkcyan")
#pptwordcloud<-barplot(table(words_per_tweet), col="darkcyan")
doc <- addPlot(doc, fun= pptwordcloud,vector.graphic =FALSE )
writeDoc(doc,file)
)
)
【讨论】:
其实最后一部分是错误的,看下面正确的代码: doc 您可以将barplot(table(words_per_tweet[,c("Sepal.Length",input$sel)]), border=NA,main="Distribution of words per tweet", cex.main=1,col="darkcyan")
定义为新的绘图函数并使用它。你在测试我的代码吗?不行吗?以上是关于使用 ReporteRs 包使用 R Shiny 生成 powerpoint 幻灯片的主要内容,如果未能解决你的问题,请参考以下文章
从使用 devtools 加载的包中设置 ReferenceClass 时,R 中的 Shiny 出错
使用 Shiny 时,包 rcpp 不适用于(R 版本 2.15.2)
R:将 p 值舍入到 xtable 中的两位有效数字,并将 ReporteRs 导出到 Latex/Office/LibreOffice