我有一个R脚本,它通过从csv文件编译数据,在powerpoint幻灯片上生成各种图形。我正试图将其转换为一个闪亮的应用程序,该应用程序在上传csv文件后生成deck,但不知道如何读取csv文件,然后生成pptx下载。
这是我的UI:
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)
当引用本地文件时,代码会生成一个deck。当我上传文件时,我会收到下面的错误。我还将数据文件部分移到了下载处理程序之外,但之后什么也没发生。
警告:downloadHandler中出错:未使用的参数(数据文件<-reflective({inFile<-输入$file3if(is.null(inFile((返回(null(read.csv(在文件$datapath中,na.strings="null"(}))
有什么建议吗?
我通常通过将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
提取数据。
您遇到的问题是downloadHandler
和所有函数一样,只接受其帮助文件中描述的特定参数:?downloadHandler
:
downloadHandler(filename, content, contentType = NA, outputArgs = list())
通过在函数调用中插入一块R代码(data_file <- reactive({...
(,R将该代码视为一个参数,并试图找出如何将其传递到函数中。由于它是第一个参数,因此通常会尝试将其传递给第一个参数filename
(在这种情况下,这会产生错误,因为filename
接受字符串,而不是R表达式(,但您已经在稍后的调用中使用命名参数定义了filename
,因此R不知道该如何处理此参数,并返回unused argument
错误。
您应该将此代码块移到downloadHandler
函数之外(但移到server
函数内部(,然后从传递给content
参数的函数内部调用反应表达式的值。