可以使用闪亮的reactUI界面选择性地显示仅在特定时间相关的输入变量。这是一个带有变量“ a”的示例,该变量根据值导致接口显示变量“ c”或“ d”:
用户界面
shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("a","choose selection",list("c","d")),
uiOutput("b")),
mainPanel(verbatimTextOutput("text"))
)))
服务器
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
。
这是一种方法。在这里,我将当前选择存储为全局变量,将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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句