2017-02-21 46 views
0

请运行此代码。当你点击数据表中的一行时,你会看到“a”列中的数字被绘制出来。这是使用回调和observeEvent完成的。这工作正常。使用click.dt与滑块进行过滤后,点击不更新

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) 
     }) 

    })} 
)) 

但是你也看到一个“NUMBER”滑块输入。当用户更改滑块时,我希望绘图更新,以便绘图显示滑块中所选数字的倍数。所以:

注释掉该行:

new_number = a 

并取消这一行:

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

现在重新运行代码,你会看到,当你从滑块选择不同的电话号码,但没有任何反应。这是因为

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

是在ObserveEvent函数内,并且表格没有被点击......只是滑块被改变了。那么如何提供NUMBER()以便它可以工作?

谢谢。

回答

2

所有你需要做的渲染新的情节 - [R抓起更新的输入时,把一个observeEvent到您的observeEvent :)这样。希望这可以帮助 !

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) 

     }) 

    }) 

    } 
    )) 
+0

感谢,如果我有多个选择输入?说我有NUMBER1和类别应该怎么observeEvent设立observeEvent(输入$号,输入$分类{........输出$ P = renderplot()})? – user3022875