Установите формат даты с помощью lubridate в R shiny

Я пытаюсь установить формат даты для ввода csv в блестящем приложении, но я действительно заблудился. Я видел много вещей, использующих switch так же, как и я, но все происходит примерно так:

 ui <- fluidPage(
   theme = shinytheme("sandstone"),             

   # Navigation bar
   navbarPage("Let's do some analysis!",

              # Upload Tab
              tabPanel("Upload",
                       sidebarPanel(
                             fileInput(inputId = "data", label = "Choose CSV Data Set",
                                       accept = c(                                                           
                                         "text/csv",
                                         "text/comma-separated-values,text/plain",
                                         ".csv")
                             ), #fileInput - data

                             checkboxGroupInput("sep1", h5("Separator"), choices = list(";" = ";" , "," = ",")),

                             fileInput(inputId = "stopwords", label = "Choose CSV Stopwords File",
                                       accept = c(
                                         "text/csv",
                                         "text/comma-separated-values,text/plain",
                                         ".csv")
                             ),#fileInput - stopwords

                             checkboxGroupInput("sep2", h5("Separator"), choices = list(";" = ";" , "," = ",")),

                             checkboxGroupInput("date", h5("Date format"), choices = list("ymd" = 1 , "mdy" = 2, "dmy" = 3, "ydm" = 4)),
                             h5("y = year, m = month, d = day"),

                           ), #sidebarPanel - Upload
                           mainPanel(
                             DT::dataTableOutput("data"),
                             h5("Please make sure you selected each separator accurately and take a look at how 'File.Date' is displayed!"),
                             br(),
                             DT::dataTableOutput("stopwords")
                           ) #maiPanel - Upload
              ), #tabPanel - Upload

              # Analizing & Modeling Tab 
              tabPanel("Analizing & Modeling",
                       fluidRow(
                         column(6,
                                visOutput('LDAvis')),
                         column(6,
                                DT::dataTableOutput("top_abstracts"), downloadButton("downloadData", "Download Top Abstracts per topic"))

                       )#fluidRow

              )#tabPanel - Analizing & Modeling 

   ) # navbarPage
 ) #fluidPage

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

   og_data <- eventReactive(input$data,{
     inFile1 <- input$data
     if (is.null(inFile1)) {
       return(NULL)
     } else {
       return(read.csv(inFile1$datapath, sep = input$sep1, header = T, stringsAsFactors = F)) 
     }
   }) # eventReactive - og_data

   og_data <- eventReactive(input$date,{
     switch (input$date,
       1 = ymd(og_data()$File.Date),
       2 = mdy(og_data()$File.Date),
       3 = dmy(og_data()$File.Date),
       4 = ydm(og_data()$File.Date)
     ) 
   }) # eventReactive - innog_data with accurate date format

   stopwords <- eventReactive(input$stopwords,{
     inFile2 <- input$stopwords
     if (is.null(inFile2)) {
       return(NULL)
     } else {
       return(read.csv(inFile2$datapath, sep = input$sep2, header = F, stringsAsFactors = F)) 
     }
   }) # eventReactive - stopwords

   # Upload tab

   output$data <- DT::renderDataTable({
     DT::datatable(og_data(), options = list(pageLength = 1, lengthMenu = c(1,3)))
   })

   output$stopwords <- DT::renderDataTable({
     DT::datatable(stopwords())
   })
 } #server function

Может кто-нибудь сказать мне, что я делаю не так?


person Melania CB    schedule 12.12.2019    source источник
comment
Первое, что вы делаете неправильно, - это отправляете вывод консоли. Вы должны публиковать сам код, а не вывод консоли, иначе, когда мы копируем и вставляем ваш код, он заполняется знаками «+»!   -  person heds1    schedule 12.12.2019
comment
Вы не можете использовать переключатель с числовыми именами параметров. Это приведет к синтаксической ошибке: x <- 1; switch(x, 1="ok"), но не x <- 1; switch(x, "1"="ok"). Обычно, если вы просто выполняете сопоставление по индексу, вы должны оставить часть 1= отключенной.   -  person MrFlick    schedule 12.12.2019


Ответы (1)


Имена аргументов функций, включая параметры для switch, должны быть допустимыми именами объектов. Имена стандартных объектов не начинаются с цифр. Таким образом, проблема с 1 = ymd(og_data()$File.Date) заключается в том, что 1 не является допустимым именем объекта.

x = 1
switch(x, 1 = "hi")
# Error: unexpected '=' in "switch(x, 1 ="

Вы можете использовать обратные кавычки вокруг чисел, чтобы сделать их нестандартными именами:

x = 1
switch(x, `1` = "hi")
# [1] "hi"

Или (предпочтительно) вы можете использовать стандартные имена переменных, которые также являются описательными. Это более понятно и менее подвержено ошибкам.

...
choices = list("ymd", "mdy", "dmy" , "ydm")
...
switch (input$date,
       "ymd" = ymd(og_data()$File.Date),
       "mdy" = mdy(og_data()$File.Date),
       "dmy" = dmy(og_data()$File.Date),
       "ydm" = ydm(og_data()$File.Date)
     ) 
...
person Gregor Thomas    schedule 12.12.2019
comment
Он показывает эту ошибку, хотя я знаю, что это 'ymd', и я делаю это в консоли reg, и она отлично работает: Listening on http://127.0.0.1:3363 Warning: Error in format.default: invalid 'trim' argument [No stack trace available] - person Melania CB; 19.12.2019
comment
Возможно, задайте новый вопрос, поделившись воспроизводимым примером. Я не знаю, как помочь с этим без некоторого образца ввода для тестирования. - person Gregor Thomas; 19.12.2019