1

我有一个 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 中的错误:未使用的参数 (datafile <- reactive({ inFile <- input$file3 if (is.null(inFile)) return(NULL) read.csv(inFile$datapath, na.strings = "null") }))

有什么建议么?

4

2 回答 2

1

我通常使用reactiveValueswith来避免这种情况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.

于 2019-01-14T19:44:35.800 回答
0

您遇到的问题是downloadHandler,像所有函数一样,只接受其帮助文件中描述的特定参数?downloadHandler

downloadHandler(filename, content, contentType = NA, outputArgs = list())

通过在函数调用中粘贴一段 R 代码(the data_file <- reactive({...),R 认为该代码是一个参数,并试图弄清楚如何将它传递给函数。因为它是第一个参数,它通常会尝试将它传递给第一个参数,filename在这种情况下(这会给出错误,因为filename接受一个字符串,而不是一个 R 表达式),但你已经在filename稍后使用命名参数进行了定义在调用中,所以 R 不知道如何处理这个参数并返回一个unused argument错误。

您应该将此代码块移到函数外部downloadHandler(但在函数内部server),然后从传递给content参数的函数内部调用反应表达式的值。

于 2019-01-14T23:15:05.283 回答