Используя код GitHub, я теперь могу воспроизвести ваше приложение.Кажется, что onSessionEnded
вызывается, так как файл записывается на диск, а также вызывается cat
.Так что я не думаю, что проблема есть.Каким-то образом cherrypickedpalette <<-
не присваивается глобальной среде.
Но я не понимаю, зачем записывать результаты на диск, а затем сканировать их снова, чтобы получить значения?Это по определенной причине?
Я смог присвоить цвета глобальной среде, используя assign
в функции onSessionEnded.
Попробуйте вместо этого использовать эту функцию CustomPal
:
CustomPal <- function(new_pal){
if (interactive()){
cherrypickedpalette <- runApp(list(
ui = {fluidPage(
titlePanel("Cherry Pick Your Own Palette!"),
sidebarPanel (hr(),
selectInput('col', 'Options', new_pal, multiple=TRUE, selectize=FALSE, size = 15)
),
mainPanel(
h5('Your Cherry-Picked Palette',style = "font-weight: bold;"),
fluidRow(column(12,verbatimTextOutput("col"))),
actionButton("action", label = "I'm Done")
)
)},
server = function(input,output,session) {
outputdata<- reactive({
input$col
})
output$col <- {
renderPrint(outputdata())
}
observeEvent(input$action, {
stopApp()
})
session$onSessionEnded(function(){
message <- paste(isolate(outputdata())," ")
print(paste("Message: ", message))
assign("cherrypickedpalette", message, pos = .GlobalEnv)
stopApp(cherrypickedpalette)
})
}
)
)
}
}
После загрузки всех функций, вызовите блестящее приложение, выберите цвета, закройте приложение с помощью actionButton или закройте окно, и цвета должны быть сохранены в переменной cherrypickedpalette
.
library(shiny)
CherryPickPalette("BiryaniRice","Kulfi","Haveli2")
cherrypickedpalette
UPDATE1:
Вы также можете опустить весь процесс onSessionEnded
и записать переменную в глобальную среду внутри функции observeEvent
.
Удалить функцию сеанса и заменитьtheviewEvent с этим:
observeEvent(input$action, {
cherrypickedpalette <<- paste(isolate(outputdata())," ")
stopApp()
})
UPDATE2:
Итак, onSessionEnded работает, и проблема на самом деле связана с функцией scan
.Кажется, что вы не можете писать напрямую в глобальную среду с помощью этой функции.Но вы можете использовать его для хранения значения и в следующей строке присвоить это значение glob.env.Следующие строки также должны работать, если требуется сохранить значения на диск.
cherrypickedpalette <- scan(file=colorfile," ")
cl <<- cherrypickedpalette