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()
})
})
这可以这样实现:
您重复了数据集的名称,即 iris2 %>% select(iris2, all_of(varY()))
应该只是 iris2 %>% select(all_of(varY()))
您还必须 select by
变量,即 select(all_of(c(varY(), varX())))
将反应函数直接传递给by
会出错。因此,我添加了一个辅助变量 by
,我将其传递给 tbl_summary
的 by
参数。
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()
})
到目前为止:
我想要一个 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()
})
})
这可以这样实现:
您重复了数据集的名称,即
iris2 %>% select(iris2, all_of(varY()))
应该只是iris2 %>% select(all_of(varY()))
您还必须 select
by
变量,即select(all_of(c(varY(), varX())))
将反应函数直接传递给
by
会出错。因此,我添加了一个辅助变量by
,我将其传递给tbl_summary
的by
参数。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() })