基于Shiny中observeEvent中未列出的其他输入进行表刷新

问题描述 投票:0回答:1

我有一个闪亮的应用程序,可以进行模糊匹配。 用户输入产品、搜索词和容差(即与搜索词的可接受距离)。 由于数据集很大,我只想在按下“do_search”按钮时更新表格。

第一次加载时它可以工作,我输入所有 3 个值,然后按“do_search”,它就可以工作。

但后来我注意到,当我更改搜索词、产品或容差时,表格会即时刷新。 我原以为这些东西只有在按下按钮时才会更新。

界面如下:

ui <- fluidPage(
  useShinyjs(),
  #theme = bs_theme(version = 4, bootswatch = "minty"),
  headerPanel("TCS Adverse Event Fuzzy Search Tool"),
  
  fluidRow(
    column(3, 
           disabled(
             selectInput("ingredients", label = "Select one or more Active Ingredients:", choices = NULL, multi=TRUE))
           ),
  
    column(3, 
           disabled(
             textInput("search_term", "AE Search Term:"))
           ),
    
    column(3, 
            disabled(
              sliderInput("search_tolerance", label = "Search Tolerance:",
                          min = 0, max = 0.7, value = 0.2, step = 0.05))
           ),
    
    disabled(
      actionButton("do_search", "Perform Search"))
  )
  ,reactableOutput("search_results")
  
  
  
)

服务器(截断)代码如下:

    server <- function(input, output, session) {
      
      
      # retrieve master data set for session
      cases_df <- reactive({
        return(get_adverse_events_from_db())
      })
      
      
      ingredients_df <- reactive({
        df <- get_list_of_actives_from_db()
        message(paste("Length of actives: ", nrow(df)))
        return(df)
        
      })
      
      observeEvent(ingredients_df(), {
        updateSelectInput(session, 
                          "ingredients",
                          label = "Select one or more Active Ingredients:",
                          choices = ingredients_df()$PRIMARY_SUSPECT_KEY_INGREDIENT,
                          selected = NULL 
        )
      })
      
      
      observeEvent(cases_df(), {
        enable("ingredients")
        enable("search_term")
        enable("search_tolerance")
        enable("do_search")
        
      })
      
      # run when do_search is clicked
      observeEvent(input$do_search, {
        output$search_results <- renderReactable({
          
          
      filter(match_score <= input$search_tolerance))
          filtered_df <- calculate_match_score(filter(cases_df(), PRIMARY_SUSPECT_KEY_INGREDIENT %in% input$ingredients), input$search_term) %>% filter(match_score <= input$search_tolerance)
          
          
          
          reactable(
                    filtered_df,
                    bordered=TRUE, 
                    highlight=TRUE, 
                    filterable=TRUE,
                    striped=TRUE,
                    outlined=TRUE,

我的困惑是为什么当按下观察到的按钮“do_search”以外的输入时表格会刷新:

# run when do_search is clicked
  observeEvent(input$do_search, {
    output$search_results <- renderReactable({
  
r shiny shiny-reactivity
1个回答
0
投票

而不是

observeEvent(input$do_search, {
  output$search_results <- renderReactable({...})
})

试试这个

   filtered_df <- eventReactive(input$do_search, {
      calculate_match_score(filter(cases_df(), PRIMARY_SUSPECT_KEY_INGREDIENT %in% input$ingredients), input$search_term) %>% filter(match_score <= input$search_tolerance)
    }) 
 
  output$search_results <- renderReactable({
    reactable(filtered_df(), ...) 
  })
  
© www.soinside.com 2019 - 2024. All rights reserved.