У меня есть блестящее приложение, в котором пользователь выбирает множество входов, таких как диапазон x, диапазон y, типы масштабирования и выбор определенного подмножества данных, установленных в выпадающем списке.
Все это делается с использованием реактивов. Входы слайдера диапазона X и Y реагируют на изменения в выборе набора данных, поскольку минимальные и максимальные значения должны быть найдены снова. Это займет примерно 1-2 секунды, пока блестящее приложение работает, и пользователь выбирает другой вариант в раскрывающемся списке. В течение этих 1-2 секунд сюжет переключается на отображение выбранного нового подмножества данных со старым диапазоном x и y, прежде чем быстро переключиться на правильный график после изменения ползунков диапазона x и y.
Исправление будет состоять в том, чтобы просто обновить график на кнопке, изолируя все остальное. Но будет ли способ заставить график реагировать на изменения, но просто подождите, пока все зависимые вещи закончат вычисление?
Спасибо
Это сюжет:
output$plot1 <- rCharts::renderChart2({
if(!is.null(input$date_of_interest) &&
!is.null(input$xrange) &&
!is.null(input$yrange) &&
!is.null(data()) &&
isolate(valid_date_of_interest())) {
filtered_data<- dplyr::filter(isolate(data()), id==input$choice)
p <- tryCatch(plot_high_chart(
data,
first_date_of_interest = input$date_of_interest,
ylim = input$yrange,
xlim = input$xrange),
error = function(e) e,
warning = function(w) w)
if(!inherits(p, "error") && !inherits(p, "warning")) {
return(p)
}
}
return(rCharts::Highcharts$new())
})
и диапазон x (диапазон y аналогичен):
output$xrange <- renderUI({
if(!is.null(input$date_of_interest) &&
!is.null(input$choice) &&
!is.null(valid_date_of_interest()) &&
isolate(valid_date_of_interest())) {
temp_data <- dplyr::filter(isolate(data()), date == input$date_of_interest)
temp <- data.table::data.table(temp_data, key = "child.id")
the_days <- as.double(as.Date(temp$last.tradeable.dt) - as.Date(temp$date))
min_days <- min(the_days,na.rm=TRUE)
max_days <- max(the_days,na.rm=TRUE)
sliderInput("xrange",
"Days Range (X Axis)",
step = 1,
min = 0,
max = max_days + 10,
value = c(min_days,max_days)
)
}
})
и выбор входа:
output$choice<- renderUI({
selectInput("choice",
"Choose:",
unique(data$id),
selected = 1
)
})
Некоторое направление и предложения по внедрению будут полезны. Я подумал о том, что глобальные переменные, такие как x_range_updated, y_range_updated, установлены в false для кода для вывода $choice, а затем заданы значение true в коде для вывода $xrange и т.д. И тогда зависимость plot1 зависит от их истинности, Другие предложения по решению этой проблемы будут оценены.