R Shiny - Найти время, когда был создан загруженный файл - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь найти дату создания CSV-файла, загруженного в Shiny.

Я попробовал 'file.info (userFile () $ datapath) $ ctime' в примере ниже. Это возвращает дату создания временного файла, который содержит загруженные данные, но не дату создания самого файла:

file.info ( "example.csv") $ CTime

[1] "2019-01-08 18:34:47 PST"

Вот воспроизводимый пример:

library("shiny")

# Module UI function
csvFileInput <- function(id, label = "CSV file") {
  # Create a namespace function using the provided id
  ns <- NS(id)

  tagList(
    fileInput(ns("file"), label),
    checkboxInput(ns("heading"), "Has heading"),
    selectInput(
      ns("quote"),
      "Quote",
      c(
        "None" = "",
        "Double quote" = "\"",
        "Single quote" = "'"
      )
    )
  )
}

# Module server function
csvFile <- function(input,
                    output,
                    session,
                    stringsAsFactors) {
  # The selected file, if any
  userFile <- reactive({
    # If no file is selected, don't do anything
    validate(need(input$file, message = FALSE))
    input$file
  })

  # The user's data, parsed into a data frame
  dfUpload <- reactive({
    read.csv(
      userFile()$datapath,
      header = input$heading,
      quote = input$quote,
      stringsAsFactors = stringsAsFactors
    )
  })

  # input$file data frame
  dfInfo <- reactive({
    input$file
  })

  # userfile() creation date
  txtFileDate <- reactive({
    msg1 <- sprintf("File Date: %s",
                    as.Date(file.info(userFile()$datapath)$ctime))
    cat(msg1, "\n")
  })

  # We can run observers in here if we want to
  observe({
    msg <- sprintf("File %s was uploaded", userFile()$name)
    cat(msg, "\n")
  })

  # Return list of reactive outputs
  return(list(
    df.Id01 = reactive({
      dfUpload()[1,]
    }),
    df.Id02 = reactive({
      dfInfo()
    }),
    txt.Id01 = reactive({
      txtFileDate()
    })
  ))
}

ui <- fluidPage(sidebarLayout(
  sidebarPanel(csvFileInput("datafile", "User data (.csv format)")),
  mainPanel(
    tableOutput("table01"),
    tableOutput("table02"),
    verbatimTextOutput("text01")
  )
))

server <- function(input, output, session) {
  lstOut <- callModule(csvFile, "datafile",
                       stringsAsFactors = FALSE)

  output$table01 <- renderTable({
    lstOut$df.Id01()
  })

  output$table02 <- renderTable({
    lstOut$df.Id02()
  })

  output$text01 <- renderPrint({
    lstOut$txt.Id01()
  })

}

shinyApp(ui = ui, server = server)
...