Как сохранить данные и загрузить их в приложение Shiny из файла данных R.

#r #shiny #rdata

Вопрос:

Я создаю таблицу DT с помощью функции observe (), значение которой может быть обновлено, когда пользователь заполнит таблицу, как показано на рисунке ниже :

введите описание изображения здесь

моя цель состоит в том, что я хотел бы сохранить обновленные данные в R. Данные при нажатии кнопки «Сохранить данные«, и если я закрою свое блестящее приложение и снова откроюсь, я смогу снова вызвать информацию, которую я вводил ранее.

Проблема в том, что я не знаю, как загрузить данные введите описание изображения здесь
введите описание изображения здесь

Любое решение или предложение действительно полезно, ниже приведен мой сценарий

 library(shiny)
library(shinyjs)
library(shinydashboard)
library(DT)
library(readr)
library(dplyr)
library(data.table)

ui <- dashboardPage(
  dashboardHeader(title = "Test dashboard"),
  dashboardSidebar(uiOutput("sidebarpanel")),
  dashboardBody(shinyjs::useShinyjs(), uiOutput("body"))
)



server <- function(input, output) {
  
  output$sidebarpanel <- renderUI({
    sidebarMenu(
        menuItem("test2", tabName = "T2", icon = icon("th")),
        actionButton("doSave", "Do Save Data"),
        actionButton("doLoad", "Do Load Data")
      )
    })
  
  output$body <- renderUI({
        tabItems(
        
        tabItem(tabName ="T2", class = "active",
                fluidRow(
                  box(width = 12, title = "DT Result", status = "warning", solidHeader = TRUE,
                      collapsible = TRUE,
                      splitLayout(
                        box(width = 12, title = "Content A", status = "warning", solidHeader = TRUE, 
                            collapsible = TRUE, dataTableOutput('content_SC_RSR'))))
                  
                )))
    })
  
  
  ##################################### TABLE RESULT 1 ##################################################
  vc <- 'value'
  SC_RSR <- reactiveValues(data=NULL)
  
  data_SC_RSR = data.frame(
    KSF = c('A', 'B', 'C'),
    SCORE = c(NA, NA, NA)
    
  )
  
  SC_RSR_Data <- reactive ({
    data_SC_RSR
  })
  
  observe({
    SC_RSR$data <- SC_RSR_Data()
    
  })
  
  output$content_SC_RSR <-  DT::renderDataTable({
    SC_RSR$data %>%
      datatable(editable = list(target = "cell", disable = list(columns = c(0,1))), options = list(paging = FALSE, searching = FALSE))
  })
  
  observeEvent(input$content_SC_RSR_cell_edit, {
    info = input$content_SC_RSR_cell_edit
    str(info)
    i = info$row
    j = info$col
    v = as.numeric(info$value)
    
    SC_RSR$data[i, j] <<- DT::coerceValue(v, SC_RSR$data$data[i, j])
    
  })
  
  
  
  #Saving data
  observeEvent(input$doSave, {
    save(SC_RSR,  file = "data.RData")
    Save_done <- showNotification(paste("Message", "Data Has been saved"), duration = NULL)
  })
  
  #Load data
  observeEvent(input$doLoad, {
    SC_RSR <- load("data.RData")
    Load_done <- showNotification(paste("Message", "Data Has been loaded"), duration = NULL)
  })
}

shinyApp(ui, server)
 

Обновить

Я уже нашел решение, я добавляю некоторые решения, как показано ниже :

 #Saving data
  observeEvent(input$doSave, {
    savedata <<- SC_RSR$data
    save(savedata,  file = "data.RData")
    Save_done <- showNotification(paste("Message", "Data Has been saved"), duration = NULL)
  })
  
  #Load data
  observeEvent(input$doLoad, {
    load("data.RData")
    SC_RSR$data <- savedata
    Load_done <- showNotification(paste("Message", "Data Has been loaded"), duration = NULL)
  })

 

Ответ №1:

Вы еще не можете создать постоянное хранилище данных на блестящих серверах, запущенных на shinyapps.io. Решение заключается в записи и чтении на облачный диск, такой как dropbox. See https://shiny.rstudio.com/articles/persistent-data-storage.html

редактировать: если вы просто локальны или находитесь на своем собственном сервере, вы можете использовать save() и load() для файлов RData.

Комментарии:

1. большое спасибо, но я не собираюсь запускать его дальше Shinyapps.io я запускаю его на своем локальном хостинге

2. если вы просто локальны или находитесь на своем собственном сервере, вы можете использовать функции save() и load() для файлов RData.