Как обновить файл .RDS файлами, загруженными пользователем, и сохранить его в следующий раз в Shiny (сервер)? - PullRequest
0 голосов
/ 07 октября 2019

По сути, имеется 50 файлов, каждый размером около 50 МБ, поэтому они обработаны и обработаны в 30 тыс. Строк данных в виде файла .RDS для визуализации. Тем не менее, пользователю необходимо приложение, чтобы загружать последние файлы и постоянно обновлять визуализацию.

Можно ли обновить файл .RDS файлами, загруженными пользователем? Может ли пользователь получить доступ к этому обновленному. Файл RDS даже в следующий раз (сеанс)?

В следующем примере есть кнопка загрузки и рендеринг только файла. Можем ли мы сохранить загруженные файлы как-нибудь? Таким образом, мы можем использовать эти загруженные файлы для обновления файла .RDS

соответствующих ссылок: R Shiny Save to Server https://shiny.rstudio.com/articles/persistent-data-storage.html

library(shiny)

# Define UI for data upload app ----
ui <- fluidPage(

  # App title ----
  titlePanel("Uploading Files"),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(

      # Input: Select a file ----
      fileInput("files", "Upload", multiple = TRUE, accept = c(".csv"))
    ),
# In order to update the database if the user clicks on the action button
 actionButton("update_database","update Database")

    # Main panel for displaying outputs ----
    mainPanel(
      # Output: Data file ----
      dataTableOutput("tbl_out")

    )

  )
)

# Define server logic to read selected file ----
server <- function(input, output) {
  lst1 <- reactive({
    validate(need(input$files != "", "select files..."))

##### Here, .RDS file can be accessed and updated for visualiztaion

    if (is.null(input$files)) {
      return(NULL)
    } else {

      path_list <- as.list(input$files$datapath)
      tbl_list <- lapply(input$files$datapath, read.table, header=TRUE, sep=";")

      df <- do.call(rbind, tbl_list)
      return(df)
    }
  })

  output$tbl_out <- renderDataTable({
##### Can also access this data for visualizations
    lst1()
  })

  session$onSessionEnded({
    observeEvent(input$update_database,{
    s3save(appended_data, object = "object_path_of_currentRDS_file",bucket = "s3_bucket")
    })
  })

}

# Create Shiny app ----
shinyApp(ui, server)

But there was an error:
Warning: Error in private$closedCallbacks$register: callback must be a function
  50: stop
  49: private$closedCallbacks$register
  48: session$onSessionEnded
  47: server [/my_folder_file_path.R#157]
Error in private$closedCallbacks$register(sessionEndedCallback) : 
  callback must be a function

1 Ответ

0 голосов
/ 07 октября 2019

Решение:

заменить этот код

 session$onSessionEnded({
    observeEvent(input$update_database,{
    s3save(appended_data, object = "object_path_of_currentRDS_file",bucket = "s3_bucket")
    })
  })
## на этот
    observeEvent(input$update_database,{
    s3saveRDS(appended_data, object = "object_path_of_currentRDS_file",bucket = "s3_bucket")
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...