我的目的是当用户通过Shinkyalert弹出窗口确认正在重新加载数据集时刷新.Rdata对象。下面是一个小例子。在加载应用程序之前,我已经创建并保存了2个对象(DatasetNumber1
和DatasetNumber2
),其中包含标签和要显示的数据。
启动该应用程序后,由于DatasetNumber1
文件,我默认加载global.R
个对象。因此,现在可以通过test
和data
访问DatasetNumber1
的{{1}}和server.R
对象(不是在此示例中,而是在完整的应用程序中) )。
我希望用户能够通过下拉菜单选择其他数据集,以刷新全局R对象,并最终绘制出图。
server.R中的ui.R
语句在选择了下拉列表中的其他数据集之后,单击了print
按钮并通过Shinyalert进行了验证,确认下拉列表输入已更改,但是Load
语句不会刷新R对象。
我已经尝试在load
脚本中使加载直接进行反应,但是结果还是一样。也许渲染的速度比加载的快,所以不会考虑更新的数据来渲染...
无论如何,我都不想重新加载应用程序和会话。
谢谢!
#inputCreation.R
global.R
#global.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")
#ui.R
library(shiny)
library(shinyjs)
library(shinyalert)
load("DatasetNumber1.Rdata")
#server.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")
)
)
)
)
答案 0 :(得分:2)
我更改了react_data的初始化。您应该从全局文件中删除<?php endwhile;
echo "<div class='paginate_wrap'>";
echo paginate_links ( array (
'add_fragment' => '#project_area',
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $related->max_num_pages,
'prev_text' => '',
'next_text' => ''
) );
echo "</div>";
endif; ?>
。这样,您可以在切换时对数据集进行垃圾收集。否则,它将永远存在于load
中。
尝试使用此服务器:
.GlobalEnv
答案 1 :(得分:0)
在@Tyler的帮助下!
#server.R
shinyServer(
function(input, output, session) {
react <- reactiveVal()
react(local({load("DatasetNumber1.Rdata"); list(test=test,data=data)}))
observeEvent(
input$shinyalert,
{
req(input$shinyalert)
load(paste(input$dropdown_dataset,".Rdata",sep=""))
react(list(test=test,data=data))
})
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=""))
removeModal()
}
}
)
})
output$test_text <- renderText(react()$test)
output$test_plot <- renderPlot(plot(react()$data))
}
)