如何将selectInput存储在向量中?

时间:2019-12-18 11:24:47

标签: r shiny

我正在尝试将selectInput保存在向量中。

在我的用户界面中,我得到了:

selectInput("my_ID", "Search for a name", unique(datatable$names), "Henry")

在我的服务器中,我想将此输入保存在变量中以供以后使用。

这基本上是我想要的:

selectedNames <- input$my_ID

当然,这不起作用。 所以我尝试了这个:

selectedNames <- reactive(input$my_ID)

但我再次收到此警告:

  

.getReactiveEnvironment()$ currentContext()中的错误:操作不正确   允许没有活动的响应上下文。 (您尝试做某事   只能从反应表达式或观察者内部完成。)

我还尝试使用观察者和我在互联网上找到的不同代码块来实现此目的,但是没有任何效果。

最后,我要使用selectedNames是这样的过滤器:

example <- datatable %>% filter(names %in% selectedNames())

我该如何解决?

1 个答案:

答案 0 :(得分:0)

尝试selectedNames <- reactive({input$my_ID})

然后在应用程序的其余部分中使用selectedNames()

请参见Reactivity - An overview

更新

工作测试示例:

library(shiny)

datatable <- data.frame(names = c('Henry', 'Charles', 'Robert', 'William'))

ui <- fluidPage(
    selectInput("my_ID", "Search for a name", unique(datatable$names), "Henry")
)

server <- function(input, output, session) {
    selectedNames <- reactive({input$my_ID})

    observeEvent(req(selectedNames()), {
        example <- datatable %>% filter(names %in% selectedNames())
        print(example)
    })
}

shinyApp(ui, server)

您实际上不需要反应式,可以直接使用input$my_ID,如下所示:

library(shiny)

datatable <- data.frame(names = c('Henry', 'Charles', 'Robert', 'William'))

ui <- fluidPage(
    selectInput("my_ID", "Search for a name", unique(datatable$names), "Henry")
)

server <- function(input, output, session) {
    observeEvent(req(input$my_ID), {
        example <- datatable %>% filter(names %in% input$my_ID)
        print(example)
    })
}

shinyApp(ui, server)