我正在尝试使用dateRangeInput来过滤和汇总一些数据。我收到以下错误:
Warning: Error in >=.default: comparison (5) is possible only for atomic and list types
我的代码 :
library(shiny)
library(shinydashboard)
library(tidyverse)
dat <- reactiveFileReader(
intervalMillis = 100000,
NULL,
filePath = 'appData/data.csv',
readFunc = read.csv,
header = TRUE
)
header <- dashboardHeader(title = "figures")
sidebar <- dashboardSidebar(uiOutput('sidebar'))
body <- dashboardBody(shinyjs::useShinyjs(),uiOutput("body"))
fluidRow1 <- fluidRow(
infoBoxOutput("calls")
)
ui <- dashboardPage(title = 'figures', header, sidebar, body, skin='blue')
server <- function(input, output, session){
overall <- reactive({
dat() %>%
filter(date >= input$dates[1]) %>%
filter(date <= input$dates[2]) %>%
select(-date) %>%
summarise_all(.funs = sum, na.rm = TRUE)
})
output$body <- renderUI({
tabItems(
tabItem(tabName = 'overall', class = 'active', h2(fluidRow1))
)})
output$sidebar <- renderUI({
sidebarMenu(
menuItem("Overall", tabName = "overall", icon = icon("adjust"),
menuSubItem(icon = NULL,
dateRangeInput(inputId = 'dates',
label = 'Range:',
start = '2019-10-03',
end = '2019-10-10'
))
))
})
output$calls <- renderInfoBox({
infoBox(
"Total Calls", overall()[1,1], icon = icon("list"),
color = "purple"
)
})
}
shinyApp(ui = ui, server = server)
我的数据如下所示:
date recordsCreated optionsCreated
1 2019-03-08 NA NA
2 2019-03-08 NA NA
3 2019-03-08 NA 1
4 2019-03-08 NA NA
5 2019-03-08 NA NA
6 2019-03-08 5 2
7 2019-03-08 8 6
8 2019-03-08 NA NA
9 2019-03-08 4 3
10 2019-03-08 NA NA
所以看起来日期列实际上是一个因素,所以我试图通过将过滤器更改为
overall <- reactive({
dat() %>%
filter(as.Date(date) >= input$dates[1]) %>%
filter(as.Date(date) <= input$dates[2]) %>%
select(-date) %>%
summarise_all(.funs = sum, na.rm = TRUE)
})
这给出了错误
Warning: Error in as.Date.default: do not know how to convert 'x' to class “Date”
任何人都可以帮忙吗?
我认为as.Date
的问题在于您没有指定格式。试试这个:
as.Date(date, format = "%Y-%m-%d")
但我认为最好通过设置read.csv
函数的参数来格式化reactiveFileReader
日期colClasses
。使用setAs
可以创建此特定日期格式的方法:
setAs("character","myDate", function(from) as.Date(from, format="%Y-%m-%d") )
dat <- reactiveFileReader(
intervalMillis = 100000,
NULL,
filePath = 'appData/data.csv',
readFunc = read.csv,
colClasses=c('myDate','numeric','numeric'),
header = TRUE
)
您可能很久以前就离开了这个问题,但看起来您需要在响应式中多加一组括号。
object <- reactive ({ (reactive_content) })
这似乎正在解决我的问题。