r语言 - 使用下拉菜单更改数据集



我正在开发一个在golem中显示数据的闪亮应用程序。我希望用户能够选择一个数据集。这是我第一次尝试从闪亮模块传递反应值,并且由于某种原因,当选择另一个数据集时,DT没有更新。下面复述一下,谢谢你的帮助!

reprex::reprex({

library(tidyverse)
library(shiny)

# modules -----------------------------------------------------------------
## filter_source----------------------------------------------------------
mod_filter_source_ui <- function(id) {
ns <- NS(id)
tagList(
shiny::selectInput(
ns("dataset"),
label = "select dataset",
choices = c("cars", "pressure", "diamonds"),
selectize = TRUE
))
}

mod_filter_source_server <- function(id) {
moduleServer(id, function(input, output, session) {
ns <- session$ns
df_dataset <- shiny::reactive({
switch(input$dataset,
"cars"= cars,
"pressure" = pressure,
"diamonds" = diamonds)
})
return(df_dataset)
})
}

## render_table ------------------------------------------------------------
mod_table_ui <- function(id){
ns <- NS(id)
tagList(
DT::dataTableOutput(ns("table_out"))
)
}
mod_table_server <- function(id, df){
moduleServer( id, function(input, output, session){
ns <- session$ns
output$table_out <- DT::renderDataTable(df)

})
}

# ui ----------------------------------------------------------------------
app_ui <- function(request) {
tagList(
fluidPage(
mod_filter_source_ui("selected_dataset"),
mod_table_ui("main_table")
)
)
}

# server ------------------------------------------------------------------
app_server <- function(input, output, session) {
df_dataset_val <- mod_filter_source_server("selected_dataset")
mod_table_server("main_table", df = df_dataset_val())
}

# run ---------------------------------------------------------------------
shinyApp(app_ui, app_server)  

})

a反应性(df_dataset_val)与反应性(df_dataset_val())的值有细微的差别。您在过滤器模块服务器的定义中做对了,并返回了响应而不是它的值。但是你在调用表模块服务器时出错了,传递了响应的当前值,而不是响应本身。

mod_table_server("main_table", df = df_dataset_val)代替mod_table_server("main_table", df = df_dataset_val()),应该就可以了。

请参阅"Writing server function ">

最新更新