【问题标题】:Shiny click on button and show new plot闪亮的点击按钮并显示新的情节
【发布时间】:2017-08-12 12:48:08
【问题描述】:

我有以下应用程序: 如果单击下一步,您将看到一个图 - 目前信息很简单 - 并且必须选择两个单选按钮选项:是或否。然后您可以单击下一个按钮并评估下一个图。问题是,您必须先单击按钮才能显示第一个图。您还可以在 print 语句中看到不匹配的情况。第一个单选按钮选项打印在第一个打印语句的第二行中。

你能帮我展示一个初始情节吗?

ui <- fluidPage(

  actionButton("buttonNext", "Next"),

  radioButtons("radio", "Your Decision:",
               choices = c("No Decision" = 'NoDec', "Yes" = 'yes', "No" = 'no'),
               selected = 'NoDec'),

  plotOutput("TimeSeriesPlot")
)


server <- function(input,output,session) {

  observeEvent(input$buttonNext, {
  })

  clickNext <- eventReactive(input$buttonNext, {
    updateRadioButtons(session,'radio',selected = -1)
    randomNumber <- input$buttonNext
    print(c(input$buttonNext,randomNumber,input$radio))
    return(randomNumber)
  })

  output$TimeSeriesPlot <- renderPlot({ 

    i <- clickNext()
    plot(i)

  })

}
shinyApp(server = server, ui = ui)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您可以使用简单的反应式,并隔离调用单选按钮值的语句。这样,反应式就不会依赖单选按钮。此外,由于它的副作用而使用响应式被认为是不好的做法,最好从单独的观察者更新单选按钮:

    ui <- fluidPage(
    
      actionButton("buttonNext", "Next"),
    
      radioButtons("radio", "Your Decision:",
                   choices = c("No Decision" = 'NoDec', "Yes" = 'yes', "No" = 'no'),
                   selected = 'NoDec'),
    
      plotOutput("TimeSeriesPlot")
    )
    
    
    server <- function(input,output,session) {
    
      clickNext <- reactive({
        isolate(input_radio <- input$radio)
        randomNumber <- input$buttonNext
        print(c(input$buttonNext,randomNumber,input_radio))
        return(randomNumber)
      })
    
      observeEvent(input$buttonNext,
                   {
                     updateRadioButtons(session,'radio',selected = -1)
                   })
    
      output$TimeSeriesPlot <- renderPlot({ 
        i <- clickNext()
        plot(i)
      })
    
    }
    shinyApp(server = server, ui = ui)
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      非常感谢!

      如何保存用户插入的数据:

      print(c(input$buttonNext,randomNumber,input_radio))
      

      这不应该只是打印出来,而是应该稍后提供给我。 我的计划是,人们评估我的情节,然后我会为每个用户查看他为每个情节单击的按钮。

      【讨论】:

      • 我认为您的意思是在评论中回复 Florain 的回答 - 而不是将答案作为评论发布。如果您将其重写为对他上述答案的评论,他将能够看到并做出回应。现在有点晚了,因为已经一年多了。
      猜你喜欢
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 2018-10-09
      • 2019-08-14
      相关资源
      最近更新 更多