r-需要按钮在计算之前按下并绘制绘制



我有一些代码,我试图用闪亮写。这涉及以下步骤: - 选择日期 - 检查日期是否存在有效的输入文件 - 如果存在有效的输入文件,请拉下该日期结束的远程时间序列 - 进行计算 - 绘制计算的结果

应反应地进行日期检查。但是,一角钱系列下拉和计算需要一些时间。因此,我希望只按按钮按下。

我大部分工作。但是,虽然我可以将计算的第一个实例关闭,直到按下按钮使用

    "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)

因此,这可以正常单击。我可以在有效和无效的日期之间更改日期,直到点击按钮,才能绘制图表。然后,如果我转到无效的日期,则图表消失了,这是正确的。但是,如果我返回有效的日期,则图表再次出现(如果我拥有实际的,冗长的代码,则将重新计算(。并且只停止计算的代码,直到按下按钮,不仅是第一次,而且在后续情况下按下按钮都很棒。谢谢!

i通过使用反应值在先前的应用中解决了此问题。考虑以下示例:

server <- function(input, output, session) {
  output_staging <- reactiveValues()
  output_staging$title <- NA
  observeEvent(input$updateButton,{  update_title()  })
  update_title <- function(){
    output_staging$title <- paste0("random number ",runif(1))
  }
  output$title <- renderText(output_staging$title)
}

renderText输出查看output_staging$title中存储的反应值。每次单击按钮时,都称为更新功能,以替换反应值。

请注意,我可以合并函数update_titleobserveEvent命令。但是将它们分开可以使我更加灵活。

在您的上下文中,我建议将数据准备和绘图生成分开,以便使用此方法。您可以在任一个位置使用反应性值:

  1. 按钮将数据发送到reactiveValue:data->反应性 -> make plot->显示图

,但您不需要两者都使用它。

最新更新