简体   繁体   English

根据闪亮R中的其他条件改变selectinput中的选择

[英]Vary the choices in selectinput based on other conditions in shiny R

I have a selectInput panel in shiny. 我有一个闪亮的selectInput面板。 I only dealt with the fixed values of choices in selectInput till now. 到目前为止,我只处理selectInput中的options的固定值。

Now I am at a point where I want to vary these choices based on some other conditions in shiny Ui. 现在我要根据闪亮的Ui中的其他条件改变这些选择。

Example: 例:

Ui.R Ui.R

shinyUI(fluidPage(
fluidRow(column(3,
wellPanel(
                  h4("Data Upload"),
                  fileInput('file1', h5('Choose Your Model Data'), accept=c('text/csv','text/comma-separated-values,text/plain','.OUT')),
                  fileInput('file2', h5('Choose Your Observation Data'), accept=c('text/csv','text/comma-separated-values,text/plain','.xlsx'))    
                ),  
wellPanel(uiOutput("check"))))

Server.R Server.R

shinyServer(function(input, output) {
output$check <- renderUI({
   selectInput("check", label = h4("Dataset Selection"), choices = c("Model" = 1, "Observation" = 2, "Both" = 3), selected = 1, multiple = F )
  })
a <- reactive({
   fileinput1 <- input$file1
   if (is.null(fileinput1))
   return(NULL)
   read.table(fileinput1$datapath, header = TRUE, col.names = c("Ei","Mi","hours","Nphy","Cphy","CHLphy","Nhet","Chet","Ndet","Cdet","DON","DOC","DIN","DIC","AT","dCCHO","TEPC","Ncocco","Ccocco","CHLcocco","PICcocco","par","Temp","Sal","co2atm","u10","dicfl","co2ppm","co2mol","pH"))
 })

 #Upload Observation Data 

 b <- reactive({
   fileinput2 <- input$file2
   if (is.null(fileinput2))
   return(NULL)
   #xlfile <- list.files(pattern = ".xlsx")
   xlfile <- fileinput2[1]
   wb <- loadWorkbook(xl_file)
   sheet_ct <- wb$getNumberOfSheets()
   b <- rbindlist(pblapply(1:sheet_ct, function(x) {
     res <- read.xlsx(xl_file, x)
   }), fill=TRUE)
   b <- b [-c(1),]
   print (b)
   })

Now I want to make the choices in selectInput dynamic based on the file input. 现在,我想基于文件输入在selectInput中进行动态选择。

I have tried to correct some of the issues in the server.R file. 我试图纠正server.R文件中的某些问题。 Note that I followed the following algorithm 请注意,我遵循以下算法

  1. if file1 is uploaded first then choice is "Model" 如果先上传file1,则选择“模型”
  2. if file2 is uploaded subsequently then choices should be "Model", "Observation", "Both" 如果随后上传了file2,则选择应为“模型”,“观察”,“两者”
  3. if file2 is uploaded first the choice is "Observation" 如果先上传file2,则选择“观察”
  4. if file1 is uploaded subsequently then choices should be "Model", "Observation", "Both" 如果随后上传了file1,则选择应为“模型”,“观察”,“两者”

library(shiny) library(xlsx) 库(发光)库(xlsx)

shinyServer(function(input, output) {

  a <- reactive({
    fileinput1 <- input$file1
    if (is.null(fileinput1))
      return(NULL)
    #read.table(fileinput1$datapath, header = TRUE, col.names = c("Ei","Mi","hours","Nphy","Cphy","CHLphy","Nhet","Chet","Ndet","Cdet","DON","DOC","DIN","DIC","AT","dCCHO","TEPC","Ncocco","Ccocco","CHLcocco","PICcocco","par","Temp","Sal","co2atm","u10","dicfl","co2ppm","co2mol","pH"))

    #Please change this part back to your code as I dont have your file based on the column names above
    read.table(fileinput1$datapath, header= TRUE)
  })

  #Upload Observation Data 

  b <- reactive({
    fileinput2 <- input$file2
    if (is.null(fileinput2))
      return(NULL)
    #xlfile <- list.files(pattern = ".xlsx")
    xlfile <- fileinput2$datapath
    wb <- loadWorkbook(xlfile)
    sheet_ct <- wb$getNumberOfSheets()
    b <- rbind(list(lapply(1:sheet_ct, function(x) {
      res <- read.xlsx(xlfile, x)
    })))
    b <- b [-c(1),]
    print(b)
  })

  getModel <- reactive({
    if(!is.null(a()) & !is.null(b()))
    {
      c("Model", "Observation", "Both")
    }
    else if(!is.null(a()))
    {
      "Model"
    }
    else if(!is.null(b()))
    {
      "Observation"
    }


  })
  output$check <- renderUI({
    selectInput("check", label = h4("Dataset Selection"), choices = as.list(getModel()), multiple = F )
  })


})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM