在 Shiny 会话结束时保存用户输入?
Saving User inputs at end of Shiny session?
我正在尝试制作允许用户保存输入并稍后加载它们的 Shiny App。
最简单的方法是制作保存输入的保存按钮。这是要演示的基本应用程序:
server.R
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("integer", "Integer:",
min = 0, max = 1000,
value = 500)
),
mainPanel(tableOutput("values"),
actionButton('save_inputs', 'Save inputs')
)
))
server <- function(input, output, session) {
sliderValues <- reactive({
value = input$integer
})
output$values <- renderTable({
sliderValues()
})
observeEvent(input$save_inputs,{
saveRDS( input$integer , file = 'integer.RDS')
})
}
shinyApp(ui = ui, server = server)
不过,我想自动保存,例如我希望在会话结束时保存输入。 onSessionEnded() 应该是对此的回答,但它无法达到输入值并保存它们。
session$onSessionEnded( function() {
saveRDS( input$integer, file = 'integer.RDS')
})
哪个 returns 错误:警告:
Error in .getReactiveEnvironment()$currentContext: Operation not
allowed without an active reactive context. (You tried to do something
that can only be done from inside a reactive expression or observer.)
有什么办法可以解决吗?
使用另一个观察事件函数并观察 isClosed() 的值我们可以
让这项工作
observeEvent(session$isClosed()==T,{
saveRDS( input$integer, file = 'integer.RDS')
})
observeEvent() 和 reactive() 都被认为是 "reactive" 环境,这意味着它们会在整个会话期间观察变化的值,而不仅仅是在启动时。如果你把一个需要反应的函数放在一个反应环境之外,闪亮会给你发送那个错误,告诉你这个函数永远不会被调用,除非我们把它包装在一个反应函数中。
还为精心编写的问题 +1。
使用 isolate 似乎可以解决问题。
session$onSessionEnded(function() {
isolate(saveRDS( input$integer, file = 'integer.RDS'))
})
我正在尝试制作允许用户保存输入并稍后加载它们的 Shiny App。
最简单的方法是制作保存输入的保存按钮。这是要演示的基本应用程序:
server.R
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("integer", "Integer:",
min = 0, max = 1000,
value = 500)
),
mainPanel(tableOutput("values"),
actionButton('save_inputs', 'Save inputs')
)
))
server <- function(input, output, session) {
sliderValues <- reactive({
value = input$integer
})
output$values <- renderTable({
sliderValues()
})
observeEvent(input$save_inputs,{
saveRDS( input$integer , file = 'integer.RDS')
})
}
shinyApp(ui = ui, server = server)
不过,我想自动保存,例如我希望在会话结束时保存输入。 onSessionEnded() 应该是对此的回答,但它无法达到输入值并保存它们。
session$onSessionEnded( function() {
saveRDS( input$integer, file = 'integer.RDS')
})
哪个 returns 错误:警告:
Error in .getReactiveEnvironment()$currentContext: Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)
有什么办法可以解决吗?
使用另一个观察事件函数并观察 isClosed() 的值我们可以 让这项工作
observeEvent(session$isClosed()==T,{
saveRDS( input$integer, file = 'integer.RDS')
})
observeEvent() 和 reactive() 都被认为是 "reactive" 环境,这意味着它们会在整个会话期间观察变化的值,而不仅仅是在启动时。如果你把一个需要反应的函数放在一个反应环境之外,闪亮会给你发送那个错误,告诉你这个函数永远不会被调用,除非我们把它包装在一个反应函数中。
还为精心编写的问题 +1。
使用 isolate 似乎可以解决问题。
session$onSessionEnded(function() {
isolate(saveRDS( input$integer, file = 'integer.RDS'))
})