如何从 R.Data 文件保存数据并加载到 Shiny 应用程序
How to save data and load into Shiny app from R.Data File
我正在使用 observe() 创建 DT Table,当用户填写 table 时可以更新值,如下图所示:
我的目标是在单击 保存数据按钮 时将更新的数据保存到 R.Data,
如果关闭我闪亮的应用程序,如果我再次打开,我可以再次调用我之前输入的信息。
问题是我不知道如何加载数据
任何解决方案或建议都非常有用,下面是我的脚本
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)
})
您还不能在 shinyapps.io 上的闪亮服务器 运行 上进行持久数据存储。解决方案是写入和读取类似 dropbox 的云驱动器。参见 https://shiny.rstudio.com/articles/persistent-data-storage.html
编辑:如果您只是在本地或在您自己的服务器上,您可以对 RData 文件使用 save() 和 load()。
我正在使用 observe() 创建 DT Table,当用户填写 table 时可以更新值,如下图所示:
我的目标是在单击 保存数据按钮 时将更新的数据保存到 R.Data, 如果关闭我闪亮的应用程序,如果我再次打开,我可以再次调用我之前输入的信息。
问题是我不知道如何加载数据
任何解决方案或建议都非常有用,下面是我的脚本
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)
})
您还不能在 shinyapps.io 上的闪亮服务器 运行 上进行持久数据存储。解决方案是写入和读取类似 dropbox 的云驱动器。参见 https://shiny.rstudio.com/articles/persistent-data-storage.html
编辑:如果您只是在本地或在您自己的服务器上,您可以对 RData 文件使用 save() 和 load()。