Сохранить вывод в файл после завершения R R - PullRequest
0 голосов
/ 06 июня 2018

У меня есть функция, которая запускает блестящее приложение R, позволяющее пользователям выбирать различные цвета.

Но что, если пользователь передумает и отменит выбор цвета.

Поэтому я хочу сохранить вывод пользователяв файл после завершения R интерпретатора.

Тем не менее, каждый раз, когда запускается интерпретация файла, файл сбрасывается, так что он может принять новую информацию.

Пытался 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]

Ниже приведен код и пример ввода.Это весь скрипт R

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 голосов
/ 06 июня 2018

Вы должны использовать изолят для доступа к реактивным значениям вне реактивного контекста.Следующее сработало у меня

    session$onSessionEnded(function(){
      message <- paste(isolate(outuputdata()),"\n")
      cat(message,file=colorfile, append=TRUE)
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...