创建闪亮应用程序时出现反应类错误

时间:2017-01-02 13:45:50

标签: r shiny

我有以下数据集:

Type <- c("Choice 1", "Choice 1", "Choice 1", "Choice 1", "Choice 1", 
  "Choice 1")
Date <- c("02-02-2016", "02-03-2016", "02-04-2016", "02-05-2016", 
  "02-06-2016", "02-07-2016")
Sentiment <- c(1, 2, 3, 4, 2, 3)
df <- data.frame(Type, Date, Sentiment)

现在我正在构建一个闪亮的应用程序,允许您过滤日期范围并选择类型。那么它应该是一个子集中所有情绪值的直方图。

因此我创建了以下闪亮的代码

df <- read.csv2("sample.csv", stringAsFactors = F)
df$Date <- as.Date(df$Date, format = "%d-%m-%Y")

library(shiny)
ui <- fluidPage(tabsetPanel(
  #Sliders for the first panel
  tabPanel( "Tab 1",sidebarPanel(
      dateRangeInput("daterange1", "Date range:",
                     start = "2015-01-01",
                     end   = "2015-12-31"),
      selectInput("select", label = h3("Select box"),
        choices = list("Choice 1" = 1,"Choice 2" = 2,"Choice 3" = 3),
        selected = 1)),
  mainPanel(plotOutput("coolplot"))),

  #Sliders for the second panel
  tabPanel("Tab 2", mainPanel("the results of tab2"))
  ))
server <- function(input, output) {
  filtered <- reactive({
    if (is.null(input$select)) {
      return(NULL) }
    df %>% filter(Date >= input$dateRangeInput[1],
             Date <= input$dateRangeInput[2],
             Type == input$select)
  })

  output$coolplot <- renderPlot({
    ggplot(filtered(), aes(Sentiment)) +  geom_histogram()
    })
}
shinyApp(ui = ui, server = server)

然而,当我跑步时,我收到以下错误:

incorrect length (0), expecting: 10

对于我应该采取哪些措施来避免此错误?

1 个答案:

答案 0 :(得分:-1)

这是典型的Shiny初始化错误。在定义任何输入之前,每次响应都会在执行开始时调用一次,因此它们在此时都是NULL,这会导致各种不同的错误 - 如果您不了解问题则很难诊断。

最近,对Shiny(req功能)的补充已经做出,使这更容易解决。只需添加一个:

  req(input$dateRangeInput);

作为filter被动代码中的第一行。

并且记得每当你有反应时这样做。事实上,除了直接使用input$something构造之外,您还需要它,例如observeoutput代码块,直接使用input$something

你需要Shiny版本0.13.0或更高版本。如果你有一个较旧版本的Shiny,你必须使用以下形式的语句保护你的代码:

if (!is.null(input$something)){
   #your code that needs input$something
}