R Shiny:选中复选框后立即显示所有测试

R Shiny: Displays all tests at once after checking the checkboxes

我正在尝试制作一个 R Shiny 应用程序,它会在选中复选框后同时打印 3 个统计测试。 问题是该应用程序仅打印一个输出,而其他输出“未找到”。Like can be seen here

我试过

if(input$Stattest=='PP' | input$Stattest==1)

但是..它不起作用。

我的代码是:

 output$Stattest = renderUI({
     checkboxGroupInput("Stattest", "Choose test for stationarity", choices = c("ADF","PP","KPSS-TREND"))
  })
adf <- reactive({
    if(is.na(input$Stattest)){
      return(NULL)}

     if(input$Stattest=='ADF'){
       d=list()
       c=list(df_sel()[[print(input$y)]],df_sel()[[print(input$x1)]],df_sel()[[print(input$x2)]])
       for (i in 1:3){
         d[[i]]=adf.test(c[[i]])
       }
           }
    d
    })

  output$ADF=renderPrint({
    adf()
  })

 pp <- reactive({

    if(is.na(input$Stattest)){
      return(NULL)}

    if(input$Stattest=='PP' | input$Stattest==1){
      ptest=list()
      d=list(df_sel()[[print(input$y)]],df_sel()[[print(input$x1)]],df_sel()[[print(input$x2)]])
      for (i in 1:3){
        ptest[[i]]=pp.test(d[[i]])
      }

    }
    ptest
  })


  output$PP=renderPrint({
    pp()
  })

主要“问题”是我需要创建此 reactive 函数,因为所有这些测试都将打印在 pdf 报告中。 知道我怎样才能让它发挥作用吗?

提前致谢。

制作 c 和关联的 'test variable names' 反应式表达式,执行所需的测试,将所有内容拉入最终列表,然后根据用户输入显示到 UI:

library(shiny)

ui <- fluidPage(
  uiOutput(outputId = "Stattest"), 
  
  verbatimTextOutput(outputId = "test_result")
)

server <- function(input, output, session) {
  output$Stattest = renderUI({
    checkboxGroupInput(
      inputId = "stat_test", 
      label = "Stat test:", 
      choices = c("ADF","PP","KPSS-TREND")
    )
  })
  
  # Since `df_sel()` is reactive, so should `c` be: 
  
  # <-- adf.test -->
  cc <- reactive({
    list(df_sel()[[input$y]], df_sel()[[input$x1]], 
         df_sel()[[input$x2]]) |> 
      lapply(FUN = adf.test)
  })
  
  # <-- pp.test -->
  dd <- reactive({
    list(df_sel()[[input$y]], df_sel()[[input$x1]], 
          df_sel()[[input$x2]]) |> 
      lapply(FUN = pp.test)
  })
  
  # <-- kpss-trend -->
  # ee <- reactive({
  #   list(subset_as_required) |> 
  #     lapply(FUN = your_kpss_trend_function)
  # })
  
  # <-- Final results -->
  all_results <- reactive({
    list(ADF = cc(), PP = dd(), "KPSS-TREND" = ee())
  })
  
  output$test_result <- renderPrint({
    for (test in input$stat_test) {
      print(all_results()[test])
    }
  })
}

shinyApp(ui, server)