Przyjdź do tej pory: R Shiny Reactive GT_Summary Stół

Chciałbym mieć stół GTSummary z wybranymi zmiennymi z pola Selektywna w sposób reaktywny (wejście $ Y). Jest to już osiągnięte. Teraz chciałbym wybrać argumentację przez GTSummary z drugiego pola reaktywnego SelectInput (wejście $ X). Próbowałem dużo, ale bez powodzenia. Dziękuję za pomoc.

Mój kod:

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()
  })
      
}) 
2
TarJae 26 październik 2020, 17:30

1 odpowiedź

Najlepsza odpowiedź

Można to osiągnąć w następujący sposób:

  1. Dopliczałeś nazwę zestawu danych, tj. {X0}} powinien być po prostu iris2 %>% select(all_of(varY()))

  2. Musisz także wybrać zmienną by, tj. select(all_of(c(varY(), varX())))

  3. Przekazanie funkcji biernej bezpośrednio do by daje błąd. Dlatego dodałem zmienną pomocniczą by, którą przekazuję do argumentu by tbl_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()
    })
    
2
stefan 26 październik 2020, 14:49