我有以下数据集:
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
对于我应该采取哪些措施来避免此错误?
答案 0 :(得分:-1)
这是典型的Shiny初始化错误。在定义任何输入之前,每次响应都会在执行开始时调用一次,因此它们在此时都是NULL,这会导致各种不同的错误 - 如果您不了解问题则很难诊断。
最近,对Shiny(req
功能)的补充已经做出,使这更容易解决。只需添加一个:
req(input$dateRangeInput);
作为filter
被动代码中的第一行。
并且记得每当你有反应时这样做。事实上,除了直接使用input$something
构造之外,您还需要它,例如observe
或output
代码块,直接使用input$something
。
你需要Shiny版本0.13.0或更高版本。如果你有一个较旧版本的Shiny,你必须使用以下形式的语句保护你的代码:
if (!is.null(input$something)){
#your code that needs input$something
}