2014-10-27 87 views
0

我有一个闪亮的selectInput面板。直到现在,我只处理selectInput中的选项的固定值。根据闪亮的其他条件改变selectinput中的选项R

现在我想要根据闪亮的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动态的选择。

+0

见'?updateSelectInput'及其家人的函数来处理这些问题。再看看'?conditionalPanel'。 – nicola 2014-10-27 10:06:26

+0

我已经尝试updateselectinput并没有实时更新选择列表....它就像用户上传文件1我需要更新选择列表基于那只是“模型”...如果他然后上传第二个文件然后提供所有三个选项..如果只是第二个文件上传,然后选择=只是“观察”。请让我知道如何实现这一点。 – statisticalbeginner 2014-10-27 14:27:08

回答

1

我试图纠正server.R文件中的一些问题。请注意,我也跟着下面的算法

  1. 如果file1上传第一,然后选择“模式”
  2. 如果文件2随后被上传,然后选择应该是“模型”,“观察”,“两者”
  3. 如果文件2第一次上传的选择是“观察”
  4. 如果file1上传随后再选择应该是“模型”,“观察”,“两者”

天秤座RY(闪亮)库(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) 
    }) 


}) 
+0

感谢您的回答。只是想知道有没有办法将闪亮(ui.R)中的fileInput的进度条与无功分量b计算关联起来。因为如您所知,在xlsx中合并表单需要一点时间。 – statisticalbeginner 2014-10-28 15:46:51

+0

我想你可以改变这种'B' - rbind(名单(lapply(1:sheet_ct,函数(X){ 资源< - read.xlsx(xlfile,X) })))' 到 ' b < - rbind(list(lapply(1:sheet_ct,function(x){ res < - read.xlsx(xlfile,x) withProgress(message ='Calculation in progress', detail ='这可能需要一段时间...',值= 0,{ 为(I在1:sheet_ct){ incProgress(1/sheet_ct) Sys.sleep(0.25) } }) })))' – 2014-10-28 17:15:30

+0

感谢。 ?withProgress - >没有这样的功能。与上面的代码,它将引发错误:意外的符号。 – statisticalbeginner 2014-10-28 17:28:03