Я настоятельно рекомендую вам прочитать эту статью об отладке.
В Shiny вы можете использовать функцию browser()
в функциях reactive
и render
. Это должно помочь вам найти проблему (т.е. данные имеют ожидаемую структуру)
Кажется, проблема в функции aggregate
: db_4()["date"]
возвращает data.frame
, где вам нужен вектор.
Решение:
library(shiny)
db <- data.frame(
domain = letters[1:3],
date = seq(
from = as.Date("2019-01-01"),
to = as.Date("2019-06-01"),
by = "1 months"
),
value = runif(12)
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput("domain", "Domain", choices = unique(db$domain)),
dateRangeInput("daterange", "Date",
min = min(db$date), max = max(db$date),
start = min(db$date), end = max(db$date))
),
mainPanel(
tableOutput("table2")
)
)
)
server <- function(input, output, session) {
db_4 <- reactive( {
subset(db,
db$domain %in% input$domain &
db$date<=input$daterange[2] &
db$date>=input$daterange[1]
)
})
output$table2 <- renderTable( {
req(db_4()) # Don't render table when db_4() is NULL
# Uncomment next line to check if everything goes as expected
#browser()
aggregate(
data.frame(value = db_4()$value),
by=list(date = as.factor(db_4()$date)),
sum
)
})
}
shinyApp(ui, server)
Также я настоятельно рекомендую поделиться кодом вашего минимального примера, включая некоторые фиктивные данные, чтобы их можно было мгновенно скопировать. Это увеличит шансы того, что кто-то ответит.