可以在闪亮中使用reactiveUI接口来选择性地显示仅在特定时间相关的输入变量。下面是一个带变量“a”的示例,它取决于值,使接口显示变量“c”或“d”:
ui.R
shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("a","choose selection",list("c","d")),
uiOutput("b")),
mainPanel(verbatimTextOutput("text"))
)))
server.R
choice_list <- list(
"c" = selectInput("c", "first set of choices", choices = list("cat","dog","house")),
"d" = selectInput("d", "second set of choices", choices = list("money","power","fame")))
shinyServer(function(input, output) {
output$b <- renderUI({
choice_list[input$a]
})
output$text <- renderText(paste0(input$c,input$d))
})
所以这很好用,你可以根据上下文看到你可以选择不同的项目。我的问题是,每次切换a
时,您切换到的值(c
或d
)都会重置为默认值。这不是一个问题,一次只显示一个输入,但是如果你想象一次显示许多不同的输入参数,每次切换它们都会重置它们会非常糟糕。有没有办法存储以前的值,以便在闪亮重新加载UI时它们不会重置?
只是为了更详细一点,这只是我用更大的代码集做的事情的一个例子。我有不同的用户可以运行的分析,每个分析都有自己的输入对象列表。但是它们也有很大的重叠 - 一个列表中的输入对象很多都显示在另一个列表中。目前,每当您在要进行的分析之间切换时,整个输入集都会重置,这对用户来说非常烦人。
每个分析都有一些用于运行的代码,还有一个要使用的UI对象列表。这些对象位于不同的文件中,类似于choice_list
在shinyServer
函数之外的方式。
答案 0 :(得分:1)
这是一种方式。在这里,我将当前选择存储为全局变量,将selectInput
调用存储为表达式,我每次input$a
更改时都会重新评估。
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("a","choose selection",list("c","d")),
uiOutput("b")),
mainPanel(verbatimTextOutput("text"))
))
c.selected <- 'cat'
d.selected <- 'money'
choice_list <- list(
"c" = quote(selectInput("c", "first set of choices", choices = list("cat","dog","house"), selected=c.selected)),
"d" = quote(selectInput("d", "second set of choices", choices = list("money","power","fame"), selected=d.selected))
)
server <- function(input, output) {
output$b <- renderUI({
eval(choice_list[[input$a]])
})
observe({
c.selected <<- input$c
})
observe({
d.selected <<- input$d
})
output$text <- renderText(paste0(input$c,input$d))
}
runApp(list(ui=ui, server=server))