У меня есть код, который я пытаюсь написать в Shiny. Это включает в себя следующие шаги:
- выбирая дату
- проверка наличия действительного входного файла на дату
- если существует допустимый входной файл, удаление удаленного временного ряда, заканчивающегося этой датой
- проведение расчетов
- построение результата расчетов
Проверка даты должна быть сделана реактивно. Тем не менее, выпадающий ряд центов и вычисления занимают некоторое время Поэтому я хочу, чтобы это было сделано только нажатием кнопки.
У меня большая часть этой работы. Тем не менее, хотя я могу отключить первый экземпляр вычисления до нажатия кнопки, используя
"if(input$run_shiny_risk==0){
} else {
#some code
}
Я не могу помешать автоматическому вычислению в последующих экземплярах. Другими словами, как только будет выбрана действительная дата, вычисления начнутся автоматически. Я пытался выделить расчеты без успеха. Я также попытался выделить фиктивную переменную, которая определяется значением кнопки, но опять же не повезло. Вот что я имею в отношении кода:
library(shiny)
ui <- fluidPage(
titlePanel("Risk Dashboard"),
sidebarLayout(
sidebarPanel(
helpText("Effective date"),
dateInput("shiny_end_date",
label = "Date (yyyy-mm-dd):",
value = "2018-12-31"),
actionButton("run_shiny_risk",
label = "Run risk report:"),
textOutput("selected_var")
),
mainPanel(
plotOutput("selected_var1")
)
)
)
server <- function(input, output) {
shiny_risk_test <- 0
output$selected_var <- renderText({
holdings_data_file <-paste(substr(input$shiny_end_date,3,4),substr(input$shiny_end_date,6,7),substr(input$shiny_end_date,9,10),"_Data.csv",sep="")
if(file.exists(holdings_data_file)){
end_date <- input$shiny_end_date
paste("You have selected", end_date)
} else {
"No such file"
}
})
output$selected_var1 <- renderPlot({
holdings_data_file <-paste(substr(input$shiny_end_date,3,4),substr(input$shiny_end_date,6,7),substr(input$shiny_end_date,9,10),"_Data.csv",sep="")
if(file.exists(holdings_data_file)){
if(input$run_shiny_risk==0){
#this stops the chart from being drawn initially...
} else {
plot_data <- cbind(c(1,2,3,4),c(1,2,3,4))
p<-plot(plot_data)
p
}
} else {
}
})
}
shinyApp(ui = ui, server = server)
Итак, это работает до первого клика. Я могу изменить даты между действительными и недействительными, и пока я не нажму кнопку, график не будет отображаться. Затем, если я перейду к неверной дате, диаграмма исчезнет, и это правильно. Но если я вернусь к верной дате, диаграмма появится снова (и будет пересчитана, если у меня будет действительный, длинный код). И код, который просто останавливает вычисления до тех пор, пока кнопка не будет нажата, не только в первый раз, но и в последующем случае, будет великолепен Спасибо!