我正在努力应对闪亮模块中的反应。 我试图使用checkboxgroupInput和反应数据库取决于模块内的选择,但没有成功。 我的代码:
library(shiny)
library(data.table)
country <- c('Argentina', 'United States', 'Peru', 'India', 'United Kingdom', 'Colombia','Others',
'Argentina', 'United States', 'Peru', 'India', 'United Kingdom', 'Colombia','Others')
value1 <- c(1,4,2,5,7,8,9,4,3,2,1,1,4,8)
value2 <- c(6,5,7,9,0,4,3,3,5,6,7,1,2,3)
data <- data.table(country,value1, value2)
# MODULE UI
module_UI <- function(id) {
ns <- NS(id)
fluidRow(
uiOutput(ns('choose_countries')),
verbatimTextOutput(ns("countries")),
verbatimTextOutput(ns("mean"))
)
}
# MODULE Server
module_OUT <- function(input, output, session, df, metric) {
# countries selector
output$choose_countries <- renderUI({
checkboxGroupInput("choose_countries", label = "Choose countries:",
choices = list('Argentina', 'United States', 'Peru', 'India', 'United Kingdom', 'Colombia','Others'),
selected = c('Argentina', 'United States', 'Peru', 'India', 'United Kingdom', 'Colombia', 'Others'), inline = T)
})
output$countries <- renderPrint({ input$choose_countries })
react_df <- reactive({
react_df <- df[country %in% input$choose_countries,]
})
output$mean <- renderPrint({ mean(react_df()$metric)})
}
# App ui
library(shinydashboard)
ui <- fluidPage(
module_UI("test_1")
)
# App server
server <- function(input, output,session){
callModule(module_OUT, "test_1", data, 'value1')
}
shinyApp(ui, server)
未显示所选国家/地区,也未显示所选指标的平均值。
我在没有使用模块的情况下测试了这个简单的代码并且工作正常。
有什么想法吗?提前致谢
答案 0 :(得分:0)
在模块中使用动态UI时,请确保输入ID已正确命名空间。
module_OUT <- function(input, output, session, df, metric) {
ns <- session$ns
# countries selector
output$choose_countries <- renderUI({
checkboxGroupInput(ns("choose_countries"), label = "Choose countries:",
choices = list('Argentina', 'United States', 'Peru', 'India', 'United Kingdom', 'Colombia','Others'),
selected = c('Argentina', 'United States', 'Peru', 'India', 'United Kingdom', 'Colombia', 'Others'), inline = T)
})
在模块中使用renderUI
在模块内部,您可能希望使用
uiOutput
/renderUI
。如果您的renderUI
块本身包含输入/输出,则需要使用ns()
来包装您的ID参数,就像上面的示例一样。但是那些ns
实例是使用NS(id)
创建的,在这种情况下,没有使用id参数。怎么办?会话参数可以为您提供
ns
;只需致电ns <- session$ns
。这会将ID放在与会话相同的名称空间中。