r-使用单击滑块使用单击后,单击不更新后进行过滤



请运行此代码。当您单击DataTable中的一行时,您将看到" A"列中的数字。这是使用回调并观察到的。效果很好。

library(shiny)
library(DT)
runApp(shinyApp(
  ui = fluidPage(
                   DT::dataTableOutput('table')  ,
                   selectInput("NUMBER", "Number:", c(1,100,1000000),selected = 1),
                   plotOutput("p")
                   ),
  server = function(input, output, session) {
    NUMBER = reactive({
      input$NUMBER
    })
    output$table <- DT::renderDataTable({
      datatable(data.frame(a = c(85,7),b=c(444,2)), rownames = FALSE, selection = 'none', callback=
      JS("table.on('click.dt', 'tr', function() {
           var data=table.row(this).data();
           Shiny.onInputChange('rows',data[0]);
          });")
      )}
    )
    observeEvent(input$rows, {
      print( input$rows)   
      print( class( input$rows)  )
      a = as.numeric(input$rows)
      print(a)
      print(NUMBER())
      new_number = a      #THIS WORKS!!!
      #new_number = a  * as.numeric(NUMBER())    #THIS DOES NOT WORK     multiple a by the number in the slider when the SLIDER Is CHANGED
      output$p = renderPlot({
        # browser()
        plot( new_number )
      })
    })}
))

,但您还会看到一个"数字"滑块输入。当用户更改滑块时,我希望绘图更新,以便绘图显示滑块中选择的数字。所以:

评论这一行:

new_number = a 

和不注重这一行:

new_number = a  * as.numeric(NUMBER()) 

现在重新运行代码,您会看到,当您从滑块中选择不同的数字时,但是什么也不会发生。这是因为

new_number = a  * as.numeric(NUMBER()) 

在观察者的功能内部,没有单击表...只是更改了滑块。那么如何提供数字()以使其可行?

谢谢。

您要做的就是将观察者的观察者放在您的观察者中:)当渲染新图r捕获更新的输入时,这样的方式。希望这会有所帮助!

 library(shiny)
    library(DT)
    runApp(shinyApp(
  ui = fluidPage(
    DT::dataTableOutput('table')  ,
    selectInput("NUMBER", "Number:", c(1,100,1000000), selected = 1),
    plotOutput("p")
  ),
  server = function(input, output, session) {
    NUMBER = reactive({
      input$NUMBER
    })
    output$table <- DT::renderDataTable({
      datatable(data.frame(a = c(85,7),b=c(444,2)), rownames = FALSE, selection = 'none', callback=
                  JS("table.on('click.dt', 'tr', function() {
                     var data=table.row(this).data();
                     Shiny.onInputChange('rows',data[0]);
    });")
      )}
      )
    observeEvent(input$rows, {
      print( input$rows)   
      print( class( input$rows)  )
      a = as.numeric(input$rows)
      new_number <- a
      observeEvent(input$NUMBER, {
        print(a)
        print(NUMBER())
        number = a  * as.numeric(NUMBER())    
        output$p = renderPlot({
          # browser()
          plot( number )
        })
      })
      output$p = renderPlot({
        # browser()
        plot( new_number )
      })
    })
    }
   ))

相关内容

  • 没有找到相关文章

最新更新