【发布时间】:2020-11-03 23:58:30
【问题描述】:
我的目标是在用户通过闪亮警报弹出窗口确认数据集重新加载时刷新 .Rdata 对象。下面是一个小例子。在加载应用程序之前,我创建并保存了 2 个对象(DatasetNumber1 和 DatasetNumber2),其中包含要显示的标签和数据。
当应用程序启动时,我默认加载 DatasetNumber1 对象,这要归功于 global.R 文件。所以现在DatasetNumber1 中的test 和data 对象可以通过server.R 和ui.R 访问,这是我需要的(不是在这个例子中,而是在我的完整应用程序中)。
我希望用户能够通过下拉列表选择其他数据集以刷新全局 R 对象并最终进行绘图。
server.R 中的print 语句,在我选择下拉列表中的其他数据集后,单击Load 按钮并通过shinyalert 验证,确认下拉输入已更改,但load语句不会刷新 R 对象。
我尝试在global.R 脚本中直接进行加载反应,但结果相同。也许渲染比加载快,所以没有考虑到更新的数据来渲染......
无论如何我都不想重新加载应用程序和会话。
谢谢!
#inputCreation.R
test <- "IamDatasetNumber1"
data <- c(1, 3, 6, 4, 9)
save(test, data, file = "./Test/DatasetNumber1.Rdata")
test <- "IamDatasetNumber2"
data <- c(2, 7, 9, 12, 13)
save(test, data, file = "./Test/DatasetNumber2.Rdata")
#global.R
library(shiny)
library(shinyjs)
library(shinyalert)
load("DatasetNumber1.Rdata")
#ui.R
shinyUI(
fluidPage(
useShinyjs(),
div(
id = "main_page",
fluidRow( # -------------------------------------------------------
column(
2, offset=0,
selectInput("dropdown_dataset", "Dataset :", choices=c("DatasetNumber1", "DatasetNumber2"), selected="DatasetNumber1")
),
column(
1, offset=0,
useShinyalert(),
actionButton("button_dataset", "Load"),
)
),
fluidRow( # -------------------------------------------------------
uiOutput("test_text")
),
fluidRow( # -------------------------------------------------------
plotOutput("test_plot")
)
)
)
)
#server.R
shinyServer(
function(input, output, session) {
observeEvent(input$button_dataset, {
shinyalert(title = "Are you sure?",
text = "This action can take a while",
type = "warning",
closeOnEsc = TRUE,
closeOnClickOutside = TRUE,
showCancelButton = TRUE,
showConfirmButton = TRUE,
confirmButtonText = "OK",
confirmButtonCol = "#AEDEF4",
cancelButtonText = "Cancel",
inputId = "shinyalert",
callbackR = function(x){
if(x){
showModal(modalDialog("Loading...", footer=NULL))
print(paste(input[["dropdown_dataset"]],sep=""))
load(paste(input[["dropdown_dataset"]],".Rdata",sep=""))
removeModal()
}
}
)
})
output$test_text <- renderText(test)
output$test_plot <- renderPlot(plot(data))
}
)
【问题讨论】: