#r #shiny #shinydashboard
#r #блестящий #shinydashboard
Вопрос:
Я работаю над интерактивным блестящим приложением. Чтобы отобразить следующий график одним щелчком мыши, я должен отслеживать само предыдущее значение переменной. Но когда я нажимаю на график, все переменные сбрасываются. Не могли бы вы предложить мне способ остановить сброс переменной на каждой итерации.
Например:
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Title"),
sidebarLayout(
sidebarPanel(
actionButton("Reset", label="Reset Graph")
),
mainPanel(
plotOutput("graph", width = "100%", click = "plot_click"),
verbatimTextOutput("click_info")
)
)
)
)
server <- shinyServer(function(input, output, session) {
level <- "Value1"
observeEvent(input$Reset,{
output$graph <- renderPlot({ plot(1, 1) }) }, ignoreNULL = F)
print(level)
# interaction click in graph
observe({
if(is.null(input$plot_click$x)) return(NULL)
x <- sample(20:30,1,F)
level <- "Value2"
isolate({
output$graph <- renderPlot({
draw.single.venn(x)
})
})
})
})
shinyApp(ui=ui,server=server)
Я изменил переменную уровня на «Value2». Но на следующей итерации он снова превращается в «Value1» из-за первой строки кода. Можете ли вы помочь мне сохранить его как «Value2»?
Ответ №1:
Вы можете определить его как реактивное значение:
server <- shinyServer(function(input, output, session) {
level_init <- reactiveValues(level="Value1")
level_react <- reactive({
level_init$level <- "Value2"
})
print(isolate(level_init$level))
observeEvent(input$Reset,{
output$graph <- renderPlot({ plot(1, 1) }) }, ignoreNULL = F)
# interaction click in graph
observe({
if(is.null(input$plot_click$x)) return(NULL)
x <- sample(20:30,1,F)
level_react()
print(level_init$level)
isolate({
output$graph <- renderPlot({
draw.single.venn(x)
})
})
})
})
shinyApp(ui=ui,server=server)