R shine终止

时间:2018-06-06 18:12:19

标签: r file session shiny

我有启动R闪亮应用程序的功能,允许用户选择各种颜色。

但是如果用户改变主意并取消选择颜色会怎么样。

因此我希望在R shine终止后将用户输出保存到文件中。

但是,每次启动闪亮时,文件都会重置,因此可以接收新信息。

尝试session$onSessionEnded,但在执行时出错

Listening on http://127.0.0.1:7431
Warning: 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.)
  42: stop
  41: .getReactiveEnvironment()$currentContext
  40: .dependents$register
  39: outuputdata
  37: callback [c:\RanglaPunjab/R/RanglaPunjab.R#237]

下面是代码和示例输入。这是entire R script

CherryPickPalette <- function (name, name2=NULL, name3=NULL){

  if ((nargs() < 2) || (nargs() > 3)){
    stop("Enter 2 or 3 valid palettes. Run ListPalette() for list of palettes.")
  }
  if (nargs() == 2){
    new_pal <- MergePalette(name,name2)
  }
  else if (nargs() == 3){
    new_pal <- MergePalette(name,name2,name3)
  }

  if (interactive()){
    colorfile <- paste(getwd(),"colorfile.txt",sep="/")
    if (!file.exists(colorfile)){
      file.create(colorfile)
    }
    shinyApp(
      ui = fluidPage(
        titlePanel("Cherry Pick Your Own Palette!"),
        sidebarPanel (hr(),
                      selectInput('col', 'Options', new_pal, multiple=TRUE, selectize=FALSE, size = 15)
                      ),
        mainPanel(
          h5('Your custom colors',style = "font-weight: bold;"),
          fluidRow(column(12,verbatimTextOutput("col"))))
      ),
      server = function(input,output,session){
        outuputdata<-  reactive({
          input$col
        })

        output$col <- { 
          renderPrint(outuputdata())
        }
        session$onSessionEnded(function(){
          message <- paste(outuputdata(),"\n")
          cat(message,file=colorfile, append=TRUE)
        })
      }

    )
  }
}

CherryPickPalette("BiryaniRice","Kulfi","Haveli2")

1 个答案:

答案 0 :(得分:1)

您必须使用isolate来访问反应性上下文之外的反应值。 以下为我工作

    session$onSessionEnded(function(){
      message <- paste(isolate(outuputdata()),"\n")
      cat(message,file=colorfile, append=TRUE)
    })