【问题标题】:R Shiny- Dynamic FileInput labelR Shiny-动态文件输入标签
【发布时间】:2019-02-05 19:31:59
【问题描述】:

我正在构建一个应用程序,我需要在其中选择单文件上传与双文件上传。我已经使用条件面板实现了单文件和双文件上传,但我无法更改 FileInput 标签。 这就是我需要的—— 1)当用户点击单个文件时。应该只有一个带有“选择合并文件”标签的 FileInput 2)当用户点击单独的文件时。应该有 2 个带有标签“选择测试文件”和“选择控制文件”的 FileInputs

下面是一个工作代码 图书馆(闪亮)

ui<-shinyUI(fluidPage(
  sidebarLayout(
    sidebarPanel(
      radioButtons("p", "separate input files or consolidated?",
                   list("Single file"='a', "Separate files"='b'))
    ),
    mainPanel(
        fileInput("file1","Choose first file",
                  accept = c(
                    "text/csv",
                    "text/comma-separated-values,text/plain",
                    ".csv","sas7bdat")
        ),
        conditionalPanel(
          condition = "output.dual",
          fileInput("file2", "Choose second file",
                    accept = c(
                      "text/csv",
                      "text/comma-separated-values,text/plain",
                      ".csv","sas7bdat")
          )
        ),
        conditionalPanel(
          condition = "output.dual",
          checkboxInput('headercheckbox', 
                        "Files have different headers?", 
                        value = FALSE
          )
        )### bracket close of conditional panel
    )
  )
))

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

  output$dual <- reactive({ input$p == 'b' })
  outputOptions(output, 'dual', suspendWhenHidden = FALSE)


})

shinyApp(ui,server)

如果有人可以帮忙,请告诉我?

【问题讨论】:

    标签: r shiny shiny-server shinydashboard


    【解决方案1】:

    我建议为此使用 uiOutput 和 renderUI。如果您想了解更多关于这些功能的信息,闪亮的参考资料非常好。 https://shiny.rstudio.com/reference/shiny/latest/renderUI.html

    ui<-shinyUI(
      fluidPage(
        sidebarLayout(
          sidebarPanel(
            radioButtons("p", "separate input files or consolidated?",
                         list("Single file"='a', "Separate files"='b'))
          ),
          mainPanel(
            uiOutput('file_area_1'),
            uiOutput('file_area_2'),
            uiOutput('diff_headers')
            )### bracket close of conditional panel
          )
        )
    )
    
    server<-shinyServer(function(input, output) {
      output$dual <- reactive({ input$p == 'b' })
      outputOptions(output, 'dual', suspendWhenHidden = FALSE)
      output$file_area_1 <- renderUI({
        message = 'Choose consolidated file'
        if(input$p == 'b'){
          message = 'Choose test file'
        }else{
          mesage = ''
        }
        fileInput("file1",message,
                  accept = c(
                    "text/csv",
                    "text/comma-separated-values,text/plain",
                    ".csv","sas7bdat")
        )
      })
      output$file_area_2 <- renderUI({
        if(input$p == 'b'){
          fileInput("file2","Choose control file",
                    accept = c(
                      "text/csv",
                      "text/comma-separated-values,text/plain",
                      ".csv","sas7bdat")
          ) 
        }
      })
      output$diff_headers <- renderUI({
        if(input$p == 'b'){
            checkboxInput('headercheckbox', 
                          "Files have different headers?", 
                          value = FALSE
            )
          }
      })
    })
    
    shinyApp(ui,server)
    

    【讨论】:

    • 成功了!!谢谢!!
    【解决方案2】:

    我认为如果您允许面板根据用户输入定义条件,您可以获得所需的功能:

    ui<-shinyUI(fluidPage(
      sidebarLayout(
        sidebarPanel(
          radioButtons("p", "separate input files or consolidated?",
                       list("Single file"='a', "Separate files"='b'))
        ),
        mainPanel(
          conditionalPanel(
            condition ="output.dual == 'a' " ,
            fileInput("file1","Choose Consolodated file",
                      accept = c(
                        "text/csv",
                        "text/comma-separated-values,text/plain",
                        ".csv","sas7bdat")
            )
          ),
          conditionalPanel(
            condition ="output.dual == 'b' " ,
            fileInput("file1","Choose Test file",
                      accept = c(
                        "text/csv",
                        "text/comma-separated-values,text/plain",
                        ".csv","sas7bdat")
            )
          ),
          conditionalPanel(
            condition = "output.dual == 'b'",
            fileInput("file2", "Choose control file",
                      accept = c(
                        "text/csv",
                        "text/comma-separated-values,text/plain",
                        ".csv","sas7bdat")
            )
          ),
          conditionalPanel(
            condition = "output.dual == 'b'",
            checkboxInput('headercheckbox', 
                          "Files have different headers?", 
                          value = FALSE
            )
          )### bracket close of conditional panel
        )
      )
    ))
    
    server<-shinyServer(function(input, output) {
    
      output$dual <- reactive({ input$p  })
      outputOptions(output, 'dual', suspendWhenHidden = FALSE)
    
    
    })
    
    shinyApp(ui,server)
    

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 2014-04-05
      • 2016-10-11
      • 2019-06-14
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      相关资源
      最近更新 更多