Shiny App - 从上传的 CSV 生成和下载 PPTX 幻灯片
Posted
技术标签:
【中文标题】Shiny App - 从上传的 CSV 生成和下载 PPTX 幻灯片【英文标题】:Shiny App - Generate & download PPTX slides from uploaded CSV 【发布时间】:2018-12-23 02:36:59 【问题描述】:我有一个 R 脚本,它通过编译来自 csv 文件的数据在 powerpoint 幻灯片上生成各种图表。我正在尝试将其转换为一个闪亮的应用程序,该应用程序在上传 csv 文件后生成卡片组,但无法弄清楚如何读取 csv 文件然后生成 pptx 下载。
这是我的用户界面:
ui <- (fluidPage(
titlePanel("Title"),
title = "File Upload",
sidebarLayout(
sidebarPanel(
fileInput("file1", "File1:",
accept = c("text/csv", "text/comma-separated-values,
text/plain", ".csv")),
),
mainPanel(
downloadButton('downloadData', 'Download')
)
)
)
)
还有我的服务器功能:
server<- function(input, output,session)
output$downloadData <- downloadHandler(
data_file <- reactive(
inFile <- input$file1
if (is.null(inFile)) return(NULL)
read.csv(inFile$datapath, na.strings = "null")
),
filename = "file.pptx",
content = function(file)
当引用本地文件时,代码会生成一个卡片组。当我上传文件时,我收到以下错误。我还将数据文件部分移到了下载处理程序之外,但没有任何反应。
警告:downloadHandler 中的错误:未使用的参数(数据文件
有什么建议吗?
【问题讨论】:
【参考方案1】:我通常通过使用reactiveValues
和observeEvent
而不是reactive
来避免这种情况。
server <- function(input, output)
r_values <- reactiveValues(data=NULL) # reactive values just acts as a list
observeEvent(input$file1,
req(input$file1)
df <- read.csv(input$file1$datapath)
)
然后您可以使用r_values$data
提取您的数据。
【讨论】:
【参考方案2】:您遇到的问题是 downloadHandler
与所有函数一样,只接受其帮助文件中描述的特定参数:?downloadHandler
:
downloadHandler(filename, content, contentType = NA, outputArgs = list())
通过在函数调用中粘贴一段 R 代码(data_file <- reactive(...
),R 将该代码视为一个参数,并试图弄清楚如何将其传递给函数。因为它是第一个参数,它通常会尝试将它传递给第一个参数,在这种情况下 filename
(这会给出一个错误,因为 filename
接受一个字符串,而不是一个 R 表达式),但你已经稍后在调用中使用命名参数定义 filename
,因此 R 不知道如何处理此参数并返回 unused argument
错误。
您应该将这段代码移出downloadHandler
函数(但在server
函数内部),然后从传递给content
参数。
【讨论】:
以上是关于Shiny App - 从上传的 CSV 生成和下载 PPTX 幻灯片的主要内容,如果未能解决你的问题,请参考以下文章