我想检索当前闪亮会话中的输入列表。我们可以使用 检索输入列表names(input)
。
我有一个uiOutput
and 基于不同的条件我渲染不同类型的输入。我目前面临的问题是,当条件发生变化时,列表中也会出现来自先前 renderUI 的输入。有没有办法只获取当前会话中的输入?
为了更好地解释我的查询,我有以下示例代码:
library(shiny)
ui <- fluidPage(
sliderInput(inputId = "slider",label = "", min = 1, max = 3, value = 1),
uiOutput("UI"),
actionButton(inputId = "btn", label = "Show Inputs"),
verbatimTextOutput(outputId = "textOp")
)
server <- function(input, output){
observeEvent(input$slider,{
if(input$slider == 1){
output$UI <- renderUI(
textInput("txt1",label = "Slider in position 1")
)
}else if(input$slider == 2){
output$UI <- renderUI(
textInput("txt2",label = "Slider in position 2")
)
}else{
output$UI <- renderUI(
textInput("txt3",label = "Slider in position 3")
)
}
})
observeEvent(input$btn,{
output$textOp <- renderText(
paste0(names(input), ",")
)
})
}
shinyApp(ui = ui, server = server)
在上面的代码中,当我第一次单击标有“显示输入”的操作按钮时,我得到以下文本作为输出:
btn, 滑块, txt1,
现在,当我将滑块移动到 2 时,我的输出如下:
btn, 滑块, txt1, txt2,
这里 txt1 是在滑块位于位置 1 时生成的,并且此 renderUI 被output$UI <- renderUI(textInput("txt2",label = "Slider in position 2"))
. 我想要一个txt1
不存在的输入列表。有没有办法做到这一点?
我想出了一种解决方法,假设您没有任何应取值为NULL
. 您可以设置要删除的输入值,NULL
并NULL
在显示名称时过滤非 - s。
library(shiny)
ui <- fluidPage(
tags$script("
Shiny.addCustomMessageHandler('resetValue', function(variableName) {
Shiny.onInputChange(variableName, null);
});
"
),
sliderInput(inputId = "slider",label = "", min = 1, max = 3, value = 1),
uiOutput("UI"),
actionButton(inputId = "btn", label = "Show Inputs"),
verbatimTextOutput(outputId = "textOp")
)
server <- function(input, output, session){
observeEvent(input$slider,{
for(nr in 1:3){
if(nr != input$slider) session$sendCustomMessage(type = "resetValue", message = paste0("txt", nr))
}
})
output$UI <- renderUI(
textInput(paste0("txt", input$slider), label = paste0("Slider in position ", input$slider))
)
global <- reactiveValues()
observe({
inp = c()
for(name in names(input)){
if(!is.null(input[[name]])){
inp <- c(inp, name)
}
}
isolate(global$inputs <- inp)
})
output$textOp <- renderText({
global$inputs
})
}
shinyApp(ui = ui, server = server)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句