r shiny {gtsummary} by= 来自第二个 SelectInput 的参数反应

r shiny {gtsummary} by= argument reactive from a second SelectInput

到目前为止:

我想要一个 gtsummary table,其中包含以反应方式 (Input$y) 从 SelectInput 字段中选择的变量。这已经实现了。 现在我想从第二个反应性 SelectInput 字段 (Input$x) 中为 gtsummary 选择 by= 参数。尝试了很多但没有成功。感谢您的帮助。

我的代码:

library(shiny)
library(gtsummary)
library(gt)
# make dataset with a few variables to summarize
iris2 <- iris %>% select(Sepal.Length,  Sepal.Width, Species)
# add fake factor column 
iris2 <- iris2 %>% 
  mutate(Species_1 = Species)


shinyApp(
  ui = fluidPage(
    fluidRow(
      column(12,
             # Select variable to analyze
             selectInput(inputId = "y", 
                         label = "Y-Variable:", 
                         choices = c("Sepal Length" ="Sepal.Length",
                                    "Sepal Width" = "Sepal.Width"),
                         selected = "Sepal.Length"),
             
             # select factor variable
             selectInput(inputId = "x",
                         label = "Factor:",
                         choices = c("Species" = "Species", 
                                   "Other Species" = "Species_1"),
                         selected = "Species"),
             
             gt_output('table')
      )
    )
  ),
  server = function(input, output) {

    varY <- reactive({
      input$y
      })
    varX <- reactive({
      input$x
      })
    
    output$table <- render_gt({
      
      table1 <- iris2 %>% select(iris2, all_of(varY())) %>%
        tbl_summary(by = varX()) %>%
        add_p(pvalue_fun = ~style_pvalue(.x, digits = 2)) %>% as_gt()
  })
      
}) 

这可以这样实现:

  1. 您重复了数据集的名称,即 iris2 %>% select(iris2, all_of(varY())) 应该只是 iris2 %>% select(all_of(varY()))

  2. 您还必须 select by 变量,即 select(all_of(c(varY(), varX())))

  3. 将反应函数直接传递给by会出错。因此,我添加了一个辅助变量 by,我将其传递给 tbl_summaryby 参数。

    output$table <- render_gt({
      by <- varX()
      table1 <- iris2 %>% 
        select(all_of(c(varY(), by))) %>%
        tbl_summary(by = by) %>%
        add_p(pvalue_fun = ~style_pvalue(.x, digits = 2)) %>% as_gt()
    })