我有启动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")
答案 0 :(得分:1)
您必须使用isolate来访问反应性上下文之外的反应值。 以下为我工作
session$onSessionEnded(function(){
message <- paste(isolate(outuputdata()),"\n")
cat(message,file=colorfile, append=TRUE)
})