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

时间:2014-10-27 09:59:49

标签: r shiny

我有一个闪亮的selectInput面板。到目前为止,我只处理selectInput中选项的固定值。

现在,我想要根据闪亮的Ui中的其他一些条件来改变这些选择。

示例:

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

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)
   })

现在我想根据文件输入在selectInput动态中做出选择。

1 个答案:

答案 0 :(得分:1)

我试图纠正server.R文件中的一些问题。请注意,我遵循以下算法

  1. 如果首先上传file1,则选择是&#34; Model&#34;
  2. 如果随后上传了file2,那么选择应该是&#34; Model&#34;,&#34; Observation&#34;,&#34; Both&#34;
  3. 如果首先上传file2,则选择是&#34;观察&#34;
  4. 如果随后上传了file1,那么选择应该是&#34; Model&#34;,&#34; Observation&#34;,&#34; Both&#34;
  5.   

    库(闪亮)库(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 )
      })
    
    
    })