加载新数据时清理数据表

时间:2015-12-15 11:29:21

标签: r datatable shiny

当我点击一个按钮并将结果显示到数据表中时,我想从文件中加载一个表,进行一些计算(即两列的求和元素)。简单。但是,每次加载新文件时,我都希望清除以前的结果而不显示它们,否则,它们是新结果还是旧结果会令人困惑。 这是我尝试过的。但我没有成功...... 示例表:tab.csv

x;A;B
x1;1;0
x2;2;1
x3;1;1
x4;5;2
x5;3;3

代码:ui.R

shinyUI(pageWithSidebar(
  headerPanel(""),
  sidebarPanel(),
  mainPanel(fluidRow(
    fileInput("table", "Choose CSV File"),
    actionButton("BUTCS", "Compute sum"),
    dataTableOutput("tablesum")
  ))
))

server.R

shinyServer(function(input, output) {
  user <- new.env()
  user$table    <- NULL
  user$tablesum <- NULL

  observe({
    if(is.null(input$table)){return()}
    tablefilecsv <- input$table
    user$table  <- read.csv2(tablefilecsv$name, header = TRUE)
  })

  observeEvent(input$table, {
    if(is.null(input$table)){return()}
    user$tablesum <- NULL
  })

  output$tablesum <- renderDataTable(
  {
    if(is.null(input$BUTCS)){return()}
    d <- user$table
    user$tablesum <- data.frame(x=d$x, sum=(d$A+d$B))
  }, options = list(paging = FALSE,searching = FALSE))
})

1 个答案:

答案 0 :(得分:1)

尝试,我认为这就是你想要的

shinyServer(function(input, output) {
    user <- reactiveValues(table= NULL,  tablesum= NULL)
    observeEvent(input$table, {
       if(is.null(input$table)){
        return()
      }else{
        tablefilecsv <- input$table
        user$table  <- read.csv2(tablefilecsv$datapath ,header = TRUE)
        output$tablesum <- renderDataTable(NULL)
      }
    })

    observeEvent(input$BUTCS,{
      output$tablesum <- renderDataTable({ 
        d <- user$table
        user$tablesum <- data.frame(x=d$x, sum=(d$A+d$B))
      }, options = list(paging = FALSE,searching = FALSE))
    })

  })

使用反应功能的选项(由@Stefano添加)

shinyServer(function(input, output) {
  data <- reactive({
    tablefilecsv <- input$table
    table <- read.csv2(tablefilecsv$name, header=TRUE)
  })

  observeEvent(input$table,{
    output$tablesum <- renderDataTable(NULL)
  })

  observeEvent(input$BUTCS,{
    output$tablesum <- renderDataTable({
    d <- data()
    tablesum <- cbind.data.frame(x=d$x, sum=(d$A+d$B))
  }, options = list(paging=FALSE, searching=FALSE))
  })

})