r Shiny: не удается устранить ошибку при использовании dateInput с shin js :: toggleState - PullRequest
0 голосов
/ 12 апреля 2020

Я использую R версии 3.6.2, и я сталкиваюсь с ошибкой при использовании dateInput в пределах блестящего js :: toggleState. Ошибка для моего кода не генерируется для других типов входных данных. Я чувствую, что делаю ошибку на каком-то этапе преобразования даты. Я попытался несколько разных вариантов и все еще не смог решить проблему. Любая поддержка для решения проблемы высоко ценится. Фрагменты пользовательского интерфейса и кода сервера из моих попыток приведены ниже.

Попытка 1

UI

 shinyjs::useShinyjs(),
    selectInput("player_names_output","Select Player",choices = c("Player 1","Player 2","Player 3")),
     dateInput("session_date", "Training Date",value = as.Date(NA),format = "%d-%m-%Y"),
    actionButton("submit_button","Submit"),

Сервер

   observe({
      shinyjs::toggleState("submit_button", !is.null(input$player_names) && input$player_names != "" && !is.null(input$session_date) && input$session_date != "")
    })

Ошибка в charToDate: символьная строка не имеет стандартного однозначного формата

Попытка 2

UI

shinyjs::useShinyjs(),
selectInput("player_names_output","Select Player",choices = c("Player 1","Player 2","Player 3")),
 dateInput("session_date", "Training Date",value = as.Date(NA),format = "%d-%m-%Y"),
actionButton("submit_button","Submit"),

Сервер

 observe({
      shinyjs::toggleState("submit_button", !is.null(input$player_names) && input$player_names != "" && 
   !is.null(as.Date(input$session_date,format = "%d-%m-%Y")) && as.Date(input$session_date,format = "%d- 
     %m-%Y") != "")
    })

Ошибка в charToDate: символьная строка не имеет стандартного однозначного формата

Большое спасибо

1 Ответ

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

Нет необходимости в as.Date в пользовательском интерфейсе, передайте формат даты в аргумент format dateInput. Затем передайте объекту date значение или строку символов в том же формате, переданную аргументу format.

Вставьте это в свой пользовательский интерфейс:

shinyjs::useShinyjs(),
selectInput("player_names_output","Select Player",choices = c("Player 1","Player 2","Player 3")),
dateInput("session_date", "Training Date",value = Sys.Date(), format = "dd-mm-yyyy"),  actionButton("submit_button","Submit")

Ошибка возникает из-за того, что вы пытаетесь сравнить дату со строкой на сервере. Вы можете сравнить только с как. Поместите input$session_date внутри as.character() звонка. Кроме того, ввод даты будет объектом даты по умолчанию, поэтому нет необходимости использовать as.Date на сервере.

Обновленный сервер:

server <- function(input, output, session) {
  observe({
    shinyjs::toggleState("submit_button", condition = !is.null(input$player_names) & input$player_names != "" &
                           !is.null(input$session_date) & as.character(input$session_date) != "")
  })
}

shinyApp(ui, server)
...