根据RShiny上的daterange输入做出反应性直方图

时间:2018-07-30 00:43:30

标签: r numeric date-range

这是我的第一个R Shiny项目。作为背景,我尝试制作直方图 从我从数据库中获取的数据并以日期为条件。

这是我的代码

App.R

library(shiny)
library(RJDBC)

# Define UI for application that draws a histogram
ui <- fluidPage(

   # Application title
   titlePanel("Test Project"),

   # Sidebar with a slider input for number of bins 
   sidebarLayout(
      sidebarPanel(
        dateRangeInput('dateRange',
                       label = 'Molding Date',
                       start = Sys.Date() - 7, end = Sys.Date()
        )
      ),

      # Show a plot of the generated distribution
      mainPanel(
         plotOutput("distPlot")
      )
   )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

  drv <- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver" , "C:/Microsoft JDBC Driver 6.4 for SQL Server/sqljdbc_6.4/enu/mssql-jdbc-6.4.0.jre8.jar" ,identifier.quote="`")

  con <- dbConnect(drv, "jdbc:sqlserver://localhost;databaseName=db1", "user1", "pass", DBMSencoding = "UTF-8")

  q1 <- dbGetQuery(con, "SELECT molding_date,thickness FROM table1")

     output$distPlot <- renderPlot({
      x    <- q1

      # draw the histogram
      hist(x[as.Date(x$molding_date,"%m/%d/%Y") >= min(input$dateRange) & as.Date(x$molding_date,"%m/%d/%Y") <= max(input$dateRange),], col = 'darkgray', border = 'white')
   })
}

# Run the application 
shinyApp(ui = ui, server = server)

这是我的数据

  

成型日期厚度
     2018/07/06 10
     2018/07/07 20      2018/07/08 10
     2018/07/09 9.7
     2018/07/09 10

当我运行应用程序时总是会出现此错误

  

警告:历史记录中的错误。默认值:“ x”必须为数字

绘制直方图之前是否需要将厚度数据解析为int?

1 个答案:

答案 0 :(得分:0)

很难在没有数据的情况下提供工作版本,但似乎只需要提取厚度值,因为您无法创建数据框的直方图:

x[as.Date(x$molding_date,"%m/%d/%Y") >= min(input$dateRange) & as.Date(x$molding_date,"%m/%d/%Y") <= max(input$dateRange), 'thickness']

library(dplyr)

x %>%
  filter(between(molding_date, min(input$dateRange), max(input$dateRange))) %>%
  select(thickness)

# try to wrap the dates in 'as.Date' like your example if it does not work