闪亮的用户界面:保存输入中的更改

Ric*_*ard 4 r shiny

我有一个很大的问题.我正在尝试运行一个具有相当多设置的程序,可以在ui中设置.在我的情况下,用户可能需要多次使用相同的设置运行程序.我的问题是,如果刷新或重新启动UI,则所有内容都将设置为默认值.例如:

numericInput("1", 
            label = h4("...."),
                                        4,
                                        min=1, 
                                        max=100, 
                                        step=1 
                                        ),
                           br(),
                           numericInput("2", 
                                        label = h4("..."),
                                        1000000,
                                        min=1, 
                                        max=100000000, 
                                        step=1
                                        )
Run Code Online (Sandbox Code Playgroud)

如果我将numericInput"1"设置为7,并重新运行程序,默认情况下为4.由于我有很多这样的设置,这可能是一个非常棒的嗡嗡声.所以我的问题是:"有没有办法保存我所做的改变?"

谢谢:)

jdh*_*son 5

这是一个棘手的主题.最好有一个客户端解决方案.HTML5允许使用本地存储.有许多javascript库都有简单的api.我在其中一个周围放了一个包装器作为概念证明:

devtools::install_github("johndharrison/shinyStorage")
library(shinyStorage)
library(shiny)

runApp(
  list(
    ui = fluidPage(
      addSS(),
      uiOutput("textExample")
      )
    , server = function(input, output, session){
      ss <- shinyStore(session = session)
      output$textExample <- renderUI({
        myVar <- ss$get("myVar")
        if(is.null(myVar)){
          textInput("textID", "Add some text to local storage")
        }else{
          textInput("textID", "Add some text to local storage", myVar)          
        }
      })

      observe({
        if(!is.null(input$textID)){
          if(input$textID != ""){
            ss$set("myVar", input$textID)
          }
        }
      })
    }
    )
  )
Run Code Online (Sandbox Code Playgroud)

因此演示看起来并不多.在textInput框中输入一些文本刷新浏览器,文字记住臀部欢呼!该方法可以扩展到任何R列表,例如大小达10mb的对象.我会在包装上再修补一下.