在完成所有选择之前,我如何隐藏操作按钮?

时间:2014-05-27 15:49:56

标签: r shiny

我想知道是否有办法隐藏我的闪亮应用上的动作按钮,直到侧面板中显示变量选择。我一直无法通过按钮的uiOutput来实现这一点,因为它会混淆dataTable,因为它认为输入$ submit是一个空值。这是迄今为止的代码:

ui.R

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("CSV Viewer"),

  sidebarPanel(
    fileInput('file1', 'CSV File',
              accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv')),


    tags$hr(),

    checkboxInput('header', 'Header', TRUE),

    radioButtons('sep', 'Separator',
                 c(Comma=',',
                   Semicolon=';',
                   Tab='\t'),
                 'Comma'),

    uiOutput('varselect'),

    actionButton('submit', 'Submit')

  ),

  mainPanel(

    dataTableOutput('contents')

  )
))

server.R

library(shiny)

shinyServer(function(input, output, session) {

  observe({
    csvfile <- input$file1

    if (is.null(csvfile))
      {return(NULL)}

    dt <- read.csv(csvfile$datapath, header=input$header, sep=input$sep,   quote=input$quote)

    output$varselect <- renderUI({

      checkboxGroupInput("var", "Variables", choices = names(dt), select = names(dt))

    })

    if (input$submit > 0) {output$contents <- renderDataTable({

       isolate(dt[ ,input$var])

    })} 
  })
})

tl; dr我想阻止用户推送&#34;提交&#34;按钮,然后选择要上传的文件。事实证明这对我来说很难。

提前感谢您的所有帮助! :)

1 个答案:

答案 0 :(得分:5)

您可以将actionButton添加到renderUI。我还整理了你的server.R,因为所有内容都包含在observe中,这可能不会是最好的。

library(shiny)

runApp(list(
  ui = pageWithSidebar(
    headerPanel("CSV Viewer"),

    sidebarPanel(
      fileInput('file1', 'CSV File',
                accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv')),


      tags$hr(),

      checkboxInput('header', 'Header', TRUE),

      radioButtons('sep', 'Separator',
                   c(Comma=',',
                     Semicolon=';',
                     Tab='\t'),
                   'Comma'),

      uiOutput('varselect')
    ),

    mainPanel(

      dataTableOutput('contents')

    )
  )
  ,server = function(input, output, session) {


    csvfile <- reactive({
      csvfile <- input$file1
      if (is.null(csvfile)){return(NULL)}
      dt <- read.csv(csvfile$datapath, header=input$header, sep=input$sep,   quote=input$quote)
      dt
    })

    output$varselect <- renderUI({
      if(is.null(input$file1$datapath)){return()}
      list(
        checkboxGroupInput("var", "Variables", choices = names(csvfile()), select = names(csvfile()))
        , actionButton('submit', 'Submit')
      )
    })

    output$contents <- renderDataTable({
      if(is.null(input$file1$datapath)){return()}
      if(input$submit > 0){
        isolate(csvfile()[ ,input$var])
      }
    })

  } 

)
)