R 在Shining应用程序中重置文件输入

R 在Shining应用程序中重置文件输入,r,shiny,shinyjs,R,Shiny,Shinyjs,我一直在尝试在一个闪亮的应用程序中重置fileInput,并阅读类似问题的解决方案,但我的问题仍然存在。大多数解决方案最终都会使用Dean Attali出色的shinyjs包和其中的reset()函数。以下是我的代码在遵循以下说明后的样子: library(shiny) library(shinyjs) library(xlsx) library(tidyverse) ui <- fluidPage( useShinyjs(), fileInput('inFile', 'C

我一直在尝试在一个闪亮的应用程序中重置
fileInput
,并阅读类似问题的解决方案,但我的问题仍然存在。大多数解决方案最终都会使用Dean Attali出色的
shinyjs
包和其中的
reset()
函数。以下是我的代码在遵循以下说明后的样子:

library(shiny)
library(shinyjs) 
library(xlsx) 
library(tidyverse) 

ui <- fluidPage(
  useShinyjs(),
  fileInput('inFile', 'Choose file'),
  actionButton('reset', 'Reset'),
  radioButtons("type","Choose file type",choices = c('csv','xls')),
  tableOutput('tbl')
)

server <- function(input, output, session) {

  rv <- reactiveValues(data = NULL)

  observe({
    req(input$inFile)
    if(input$type=='csv'){
      rv$data <- read.csv(input$inFile$datapath)
    }
    if(input$type=='xls'){
      rv$data <- read_excel(input$inFile$datapath)
    }

  })

  observeEvent(input$reset, {
    rv$data <- NULL
    reset('inFile')
  })

  output$tbl <- renderTable({
    rv$data
  })
}

shinyApp(ui, server)

这使我相信,
input$infle$datapath
仍然包含我先前选择的csv文件的路径名。我已经没有办法解决这个问题了,非常感谢您的帮助。

理想情况下,
fileInput
会正确重置,但您可以将此作为一种解决方法。添加一个显式标志变量(
rv$clear
)以指示您是否处于清除状态,并在重设和上载时分别在高优先级观察程序中打开和关闭该变量

library(shiny)
library(shinyjs) 
library(xlsx) 
library(tidyverse) 

ui <- fluidPage(
  useShinyjs(),
  fileInput('inFile', 'Choose file'),
  actionButton('reset', 'Reset'),
  radioButtons("type","Choose file type",choices = c('csv','xls')),
  tableOutput('tbl')
)

server <- function(input, output, session) {

  rv <- reactiveValues(
    data = NULL,
    clear = FALSE
  )

  observe({
    req(input$inFile)
    req(!rv$clear)

    if(input$type=='csv'){
      rv$data <- read.csv(input$inFile$datapath)
    }
    if(input$type=='xls'){
      rv$data <- read_excel(input$inFile$datapath)
    }

  })

  observeEvent(input$inFile, {
    rv$clear <- FALSE
  }, priority = 1000)

  observeEvent(input$reset, {
    rv$data <- NULL
    rv$clear <- TRUE
    reset('inFile')
  }, priority = 1000)

  output$tbl <- renderTable({
    rv$data
  })
}

shinyApp(ui, server)
库(闪亮)
图书馆(shinyjs)
图书馆(xlsx)
图书馆(tidyverse)

ui您是否安装了
xlsx
软件包?@Aaghaz Hussain是的,我安装了。它是否已加载,代码中未显示。它也已加载。
library(shiny)
library(shinyjs) 
library(xlsx) 
library(tidyverse) 

ui <- fluidPage(
  useShinyjs(),
  fileInput('inFile', 'Choose file'),
  actionButton('reset', 'Reset'),
  radioButtons("type","Choose file type",choices = c('csv','xls')),
  tableOutput('tbl')
)

server <- function(input, output, session) {

  rv <- reactiveValues(
    data = NULL,
    clear = FALSE
  )

  observe({
    req(input$inFile)
    req(!rv$clear)

    if(input$type=='csv'){
      rv$data <- read.csv(input$inFile$datapath)
    }
    if(input$type=='xls'){
      rv$data <- read_excel(input$inFile$datapath)
    }

  })

  observeEvent(input$inFile, {
    rv$clear <- FALSE
  }, priority = 1000)

  observeEvent(input$reset, {
    rv$data <- NULL
    rv$clear <- TRUE
    reset('inFile')
  }, priority = 1000)

  output$tbl <- renderTable({
    rv$data
  })
}

shinyApp(ui, server)