Shiny App - создание и загрузка слайдов PPTX из загруженного CSV

У меня есть сценарий R, который генерирует различные графики на слайдах PowerPoint путем компиляции данных из файла csv. Я пытаюсь преобразовать это в блестящее приложение, которое генерирует колоду после загрузки файла 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: неиспользуемый аргумент (файл данных ‹- реактивный ({inFile‹ - входной $ file3 if (is.null (inFile)) return (NULL) read.csv (inFile $ datapath, na.strings = "null") }))

Какие-либо предложения?


person scdavis50    schedule 15.07.2018    source источник


Ответы (2)


Обычно я избегаю этого, используя 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.

person Charlie    schedule 14.01.2019

Проблема в том, что downloadHandler, как и все функции, принимает только определенные аргументы, как описано в файле справки: ?downloadHandler:

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

Вставляя блок кода R (data_file <- reactive({...) внутри вызова функции, R считает этот код аргументом и пытается выяснить, как передать его в функцию. Поскольку это первый аргумент, он обычно пытается передать его первому аргументу, в данном случае filename (что приведет к ошибке, поскольку filename принимает строку, а не выражение R), но вы уже определили filename с помощью названный аргумент позже в вызове, поэтому R не знает, что делать с этим аргументом, и возвращает ошибку unused argument.

Вы должны переместить этот блок кода за пределы функции downloadHandler (но внутри функции server), а затем вызвать значение реактивного выражения изнутри функции, которую вы передаете аргументу content.

person divibisan    schedule 14.01.2019