[英]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 请注意,我遵循以下算法
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.