使用反应式函数(R)时,在Shiny中使用validate隐藏没有相关数据的绘图

使用反应式函数(R)时,在Shiny中使用validate隐藏没有相关数据的绘图,r,shiny,R,Shiny,我使用Shiny创建了一个应用程序,它显示依赖于两种不同输入的数据。我在反应函数中过滤数据,然后将其传递给绘图 当没有基于输入的相关数据时,我无法简单地隐藏曲线图(理想情况下显示有用的解释)。如果我的数据在数据帧中,我可以这样做,但由于我使用了反应函数对其进行过滤,所以这不起作用 我目前在renderPlot函数中嵌套了validate函数,它引用了由reactive函数过滤的数据帧 有人有什么想法吗 可复制代码(如果选择默认日期范围的“Bristol”,则说明问题): 库(“tidyverse

我使用Shiny创建了一个应用程序,它显示依赖于两种不同输入的数据。我在反应函数中过滤数据,然后将其传递给绘图

当没有基于输入的相关数据时,我无法简单地隐藏曲线图(理想情况下显示有用的解释)。如果我的数据在数据帧中,我可以这样做,但由于我使用了反应函数对其进行过滤,所以这不起作用

我目前在renderPlot函数中嵌套了validate函数,它引用了由reactive函数过滤的数据帧

有人有什么想法吗

可复制代码(如果选择默认日期范围的“Bristol”,则说明问题):

库(“tidyverse”)

位置您需要将日期过滤器移动到
city\u选择
reactive,并在validate中更新
need
条件-

server <- function(input, output) {
 city_selection <- reactive({
    req(input$location)
    choose_city <- subset(dog_data, dog_data$location %in% input$location) %>%
      filter(dog_birthday >= input$dates[1] & dog_birthday <= input$dates[2])
    choose_city <- droplevels(choose_city)
    return(choose_city)
  })

  output$dog_type <- renderPlot({
    validate(
      need(nrow(city_selection()) > 0, "No data for this selection.")
    )
    dog_type_plot <- city_selection() %>%
      count(dog_type) %>%
      arrange(-n) %>%
      mutate(dog_type = factor(dog_type, dog_type)) %>%
      ggplot(aes(dog_type, n)) +
      geom_bar(stat = "identity") 
    dog_type_plot
  })
}
server%
ggplot(aes(狗型,n))+
几何图形栏(stat=“identity”)
狗型图
})
}

您需要将日期过滤器移动到
城市选择
被动,并更新验证中的
需要
条件-

server <- function(input, output) {
 city_selection <- reactive({
    req(input$location)
    choose_city <- subset(dog_data, dog_data$location %in% input$location) %>%
      filter(dog_birthday >= input$dates[1] & dog_birthday <= input$dates[2])
    choose_city <- droplevels(choose_city)
    return(choose_city)
  })

  output$dog_type <- renderPlot({
    validate(
      need(nrow(city_selection()) > 0, "No data for this selection.")
    )
    dog_type_plot <- city_selection() %>%
      count(dog_type) %>%
      arrange(-n) %>%
      mutate(dog_type = factor(dog_type, dog_type)) %>%
      ggplot(aes(dog_type, n)) +
      geom_bar(stat = "identity") 
    dog_type_plot
  })
}
server%
ggplot(aes(狗型,n))+
几何图形栏(stat=“identity”)
狗型图
})
}

我在尝试运行代码时也遇到了一个错误:

Warning: Error in count: Argument 'x' must be a vector: list
我注意到的其他一些事情:


  • 对我来说,
    choose_city我在尝试运行代码时也遇到了一个错误:

    Warning: Error in count: Argument 'x' must be a vector: list
    
    我注意到的其他一些事情:


  • 对我来说,
    选择城市谢谢,这对我很有用!我尝试在validate中使用city_selection(),但它不起作用,因此移动日期筛选器一定会产生影响-非常有用,即使没有验证问题也会更好。谢谢,这对我很有效!我尝试在validate中使用city_selection(),但它不起作用,因此移动日期过滤器一定会产生影响-非常有用,即使没有验证问题也会更好。