表不会使用 Shiny 中的 renderDT 和 validate() 进行更新

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

我正在尝试制作一个闪亮的应用程序,它采用一个用于过滤数据集的数值并将过滤后的数据作为表格返回。我可以让应用程序执行我想要的操作,但是当我插入 validate() 以便在过滤器输入不是有效值时能够返回自定义消息。 这是我的代码:

in_data <- mtcars %>%
  distinct(hp, .keep_all = T) 

ui <- navbarPage("demo",
                 collapsible = T,
                 tabPanel("Cars One", uiOutput("page1")),
                 tabPanel("Car Tool", uiOutput("page2"))
)

server <- function(input, output){
  output$page1 <- renderUI({
    renderText('Page One')
  })
  
  output$page2 <- renderUI({
    fluidPage(
      sidebarLayout(
        sidebarPanel(
          numericInput(
            'input_hp', 'Enter HP:', 1, min = 1
          )
        ),
        mainPanel(
          DTOutput('car_spec')
        )
      )
    )
  })
  
  car_data <- reactive({
    in_data %>%
      filter(hp == input$input_hp) %>%
      t() 
      
  })
  
  output$car_spec <- DT::renderDT({
    # check that the hp is available
    validate(need(nrow(car_data()) < 1,
                  "Choose a different HP."))
    DT::datatable(
      car_data(),
      options = list(
        pageLength = 20,
        autoWidth = F,
        scrollX=T,
        dom = 't'
      ) # end of options
    ) 
  })
}

# Run the application
shinyApp(ui = ui, server = server)

我在这里使用一个玩具数据集(mtcars),但实际上,我想要过滤的内容没有固定的边界(除了是正整数之外)。使用上面的代码,当我输入有效值(例如 93)时,一切都会按预期工作。但是,对于 validate() 部分,即使我输入了有效值,也不会更新任何内容。我原来的应用程序是一个 2 寻呼机,第一页上有其他内容,所以这就是我在这里设置第一页的原因。与问题无关。

r shiny dt
1个回答
0
投票

问题是我在 need() 中提出了错误的问题。 我刚刚替换为:

validate(need(!is.na(car_data()), "Choose a different HP."))

感谢上面的@YBS 为我指明了正确的方向。

© www.soinside.com 2019 - 2024. All rights reserved.