首页 > 解决方案 > Shiny App Dashboard - 删除导入文件的“清除”按钮

问题描述

我打算添加一个“清除”按钮来删除导入的文件,而不是重新启动 R 会话。但是在 R studio 中导入文件时收到错误消息 “警告:<-: 'closure' 类型的对象不是子集的对象中的错误” 。

用户界面.R:

  tabItem(tabName = "datexp",
          fluidRow(
            box(width = 12,
                title = "Dataset for Exploration", status = "primary",
                solidHeader = TRUE, collapsible = TRUE, collapsed = TRUE)
          ),
          fluidRow(
            column(width = 3,
              fluidRow(
                # Box to upload initial dataset.
                box(width = 12,
                    height = 500,
                    fileInput("file", "Select Dataset"),
                    actionButton("upload", "Import"),
                    actionButton('reset', 'Clear'),#Clear input dataset#
                    hr(),

……

服务器.R:

    dataset <- reactive({
        file <- input$file
        if (is.null(file)){
          return(NULL)
        }else if(endsWith(file$name, '.sas7bdat')){
          dat <- setDT(read_sas(file$datapath))
        }else if(endsWith(file$name, '.xlsx')){
          dat <- setDT(read_excel(file$datapath))
        }else if(endsWith(file$name, '.csv')){
          dat <- setDT(read_csv(file$datapath))
        }
        dat
      })
      
      #Clear button
    observeEvent(input$upload, {
      req(input$reset)
    dataset$data <- NULL
  }) 

标签: rshiny

解决方案


也许你正在寻找这样的东西......

library(shiny)
library(shinydashboard)
library(data.table)
library(haven)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    fluidRow(
      box(width = 12,
          title = "Dataset for Exploration", status = "primary",
          solidHeader = TRUE, collapsible = TRUE, collapsed = TRUE)
    ),
    fluidRow(
      column(width = 3,
             fluidRow(
               # Box to upload initial dataset.
               box(width = 12,
                   height = 500,
                   fileInput("file", "Select Dataset"),
                   actionButton("upload", "Import"),
                   actionButton('reset', 'Clear'),#Clear input dataset#
                   hr()
               )
             )
      )
    ),
    fluidRow(
      box(width = 12,
          DTOutput("t1"))
    )
  )
)

server <- function(input, output, session) {
  dataset <- reactive({
    req(input$file)
    file <- input$file
    if (is.null(file)){
      return(NULL)
    }else if(endsWith(file$name, '.sas7bdat')){
      dat <- setDT(haven::read_sas(file$datapath))
    }else if(endsWith(file$name, '.xlsx')){
      dat <- setDT(read_excel(file$datapath))
    }else if(endsWith(file$name, '.csv')){
      dat <- setDT(read_csv(file$datapath))
    }
    dat
  })
  
  mydf <- reactiveValues()
  ### load data
  observeEvent(input$upload, {
    mydf$data <- dataset()
  })
  ### Clear button
  observeEvent(input$reset, {
    mydf$data <- NULL
  })
  
  output$t1 <- renderDT({mydf$data})
}

shinyApp(ui, server)

推荐阅读