2

到目前为止:r 闪亮的反应性 gt_summary 表

我想要一个 gtsummary 表,其中包含以反应方式(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()
  })
      
}) 
4

1 回答 1

2

这可以像这样实现:

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

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

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

    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()
    })
    
于 2020-10-26T14:49:27.487 回答