このコードを実行してください。データテーブルの行をクリックすると、「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() をどのように利用できるようにするのでしょうか?
ありがとうございました。