0

このコードを実行してください。データテーブルの行をクリックすると、「a」列の数値がプロットされます。これは、コールバックと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)

      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() をどのように利用できるようにするのでしょうか?

ありがとうございました。

4

1 に答える 1