Пожалуйста, запустите этот код. Вы увидите, когда вы нажимаете на строку в datatable, число из столбца «a» отображается. Это делается с помощью callback и observEvent. Это прекрасно работает.с помощью 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)
})
})}
))
Но вы также видите вход слайдера «НОМЕР». Когда пользователь меняет ползунок, я хотел бы, чтобы график обновлялся, чтобы график показывал число, выбранное в слайдере. Итак:
закомментируйте эту строку:
new_number = a
и раскомментируйте строки:
new_number = a * as.numeric(NUMBER())
Теперь запустите код, и вы увидите, что при выборе различных чисел от ползунка, но ничего не происходит , Это происходит потому, что
new_number = a * as.numeric(NUMBER())
находится внутри функции ObserveEvent и таблица НЕ щелкнул ... только ползунок был изменен. Итак, как NUMBER() быть доступным, чтобы это сработало?
спасибо.
Спасибо, что, если у меня есть несколько входов выбора? Скажем, у меня есть NUMBER1 и CATEGORY, как следует наблюдать за установкой registerEvent (введите $ NUMBER, введите $ CATEGORY {........ output $ p = renderplot()})? – user3022875