闪亮,observeEvent,updateSelectInput,输入重置

时间:2020-02-07 22:48:04

标签: r input shiny shinydashboard selectinput

在选择输入选项时,将正确返回所有内容。但是,如果在选择所有过滤器后更改了上一个过滤器,它将重置下一个输入。这是一个example

的gif图像。

观看gif后,我将返回到上一个输入以对其进行更改,然后重置下一个。那就是我不想发生的事情。

这是我正在使用的一些基本示例代码,因此您可以重现它:

[
{"equipament":"pir1","watts":48.0,"currentdate":"2020-02-06T21:11:55"},
{"equipament":"pir2","watts":16.0,"currentdate":"2020-02-06T21:11:55"},
{"equipament":"pir1","watts":3.0,"currentdate":"2020-02-06T21:16:52"},
{"equipament":"pir2","watts":12.0,"currentdate":"2020-02-06T21:16:52"}
]

1 个答案:

答案 0 :(得分:1)

首先,这是问题的简化示例:

library(shiny)

dd <- data.frame(in1=rep(LETTERS[1:3], 2), in2=letters[1:6])

ui <- basicPage(
    selectInput(
        inputId = "in1",
        label = "in1",
        choices = unique(dd$in1), 
        multiple = TRUE
    ),
    selectInput(
        inputId = "in2",
        label = "in2",
        choices = unique(dd$in2),
        multiple = TRUE
    )
)

server <- function(input, output, session) {

    observeEvent(input$in1, {
        updateSelectInput(
            session = session,
            inputId = "in2",
            label = "updated in2",
            choices = dd[dd$in1 %in% input$in1, "in2"]
        )
    }
    )
}

shinyApp(ui, server)

通过使用reactiveVal存储已经做出的选择,并将reactiveVal的内容传递给selected的{​​{1}}参数,我们可以获得未重置的值。下面是一个带有两个输入的简单案例的概念证明:

update*input

gif