R: Указание дат между dateRangeInput - «Ошибка в seq.int:« to »должно быть конечным числом» - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь определить даты между указанным пользователем диапазоном дат в Shiny R. Я использую версию R 3.6.2. Тем не менее я получаю сообщение об ошибке:

Ошибка в seq.int: 'to' должно быть конечным числом

при вводе значений начальной и конечной дат к seq функции. seq отлично работает, когда я жестко кодирую даты начала и окончания теста. Фрагменты кода указаны ниже, любые советы по решению проблемы приветствуются.

Части кода виджета ввода пользовательского интерфейса

dateRangeInput("date_range","Select Date Range",start = "NA",end = "NA",format="%Y-%m-%d")) ## For Date Range

div(DT::dataTableOutput("test_table"),style="width:50%;") ## For plotting table to check results

Сервер

observeEvent(input$date_range,{

  mins<- as.Date(input$date_range[1],format="%Y-%m-%d")
  maxs<- as.Date(input$date_range[2],format="%Y-%m-%d")

 dates <- seq(from=mins, to= maxs,by = 1)

 output$test_table <- DT::renderDataTable(
   data.frame(dates),

   rownames = FALSE,
   options = list(searching = FALSE, pageLength = 5,lengthChange = FALSE)

 )
})

1 Ответ

0 голосов
/ 10 апреля 2020

@ Jay,

Несколько вещей могут помочь:

  • В ui я могу использовать as.Date(NA) для значений по умолчанию start и end для обеспечить в Date формате. И вы можете использовать формат по умолчанию для dateRangeInput, который уже равен yyyy-mm-dd
  • В server проверьте свой input$date_range, чтобы убедиться, что NA не запущен. Это позволит избежать присвоения seq NA значения для запуска вашей ошибки.
  • Вы также можете сделать observeEvent выражение eventReactive и затем извлечь из него output, что предпочтительнее

Рабочий пример:

library(shiny)
library(DT)

ui <- fluidPage(
  dateRangeInput("date_range","Select Date Range",start=as.Date(NA),end=as.Date(NA)), ## For Date Range
  div(DT::dataTableOutput("test_table"),style="width:50%;") ## For plotting table to check results
)

server <- function(input, output, session) {

  dates <- eventReactive(input$date_range, {
    if (is.na(input$date_range[1]) | is.na(input$date_range[2])) return (NULL)

    mins<- as.Date(input$date_range[1],format="%Y-%m-%d")
    maxs<- as.Date(input$date_range[2],format="%Y-%m-%d")

    dates <- seq(from=mins, to=maxs, by = 1)
  })

  output$test_table <- DT::renderDataTable(
    data.frame(dates()),
    rownames = FALSE,
    options = list(searching = FALSE, pageLength = 5,lengthChange = FALSE)
  )

}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...