gpt4 book ai didi

r - 仅在单击菜单项时加载 Shiny 模块

转载 作者:行者123 更新时间:2023-12-03 20:29:22 26 4
gpt4 key购买 nike

背景

在 modules1 Shiny 应用程序中,我只想在 上的菜单项时加载模块被点击。如果未访问菜单项,我不想加载模块。

基本应用
app.R

# Libs
library(shiny)
library(shinydashboard)

# Source module
source("sample_module.R")

ui <- dashboardPage(
dashboardHeader(title = "Dynamic sidebar"),
dashboardSidebar(sidebarMenuOutput("menu")),
dashboardBody(tabItems(
tabItem(tabName = "tab_one", h1("Tab One")),
tabItem(tabName = "tab_two", sampleModuleUI("sampleModule"))
))
)

server <- function(input, output) {

callModule(sampleModuleServer, "sampleModule")

output$menu <- renderMenu({
sidebarMenu(
menuItem(
"Menu item 1",
icon = icon("calendar"),
tabName = "tab_one"
),
menuItem(
"Menu item 2",
icon = icon("globe"),
tabName = "tab_two"
)
)
})
}

shinyApp(ui, server)
sample_module.R
sampleModuleServer <- function(input, output, session) {
output$plot1 <- renderPlot({
plot(mtcars)
})
}

sampleModuleUI <- function(id) {
ns <- NS(id)

plotOutput(ns("plot1"))

}

期望的实现

所需的实现将加载 sample_module仅当单击相关菜单项时。在第 2 行:

不要从 observeEvent 内部调用 callModule;保持在顶层。获取返回的 react 表达式,并使用 eventReactive 将其包装在按钮单击中。并使用输出中的 eventReactive 等。

x <- callModule(...)
y <- eventReactive(input$go, x())
output$tbl <- DT::renderDataTable(y())


试图
app.R (修改的)
# Libs
library(shiny)
library(shinydashboard)

# Source module
source("sample_module.R")

ui <- dashboardPage(
dashboardHeader(title = "Dynamic sidebar"),
dashboardSidebar(sidebarMenuOutput("menu")),
dashboardBody(tabItems(
tabItem(tabName = "tab_one", h1("Tab One")),
tabItem(tabName = "tab_two", sampleModuleUI("sampleModule"))
))
)

server <- function(input, output) {

eventReactive(eventExpr = input$tab_two,
valueExpr = callModule(sampleModuleServer, "sampleModule")
)

output$menu <- renderMenu({
sidebarMenu(
menuItem(
"Menu item 1",
icon = icon("calendar"),
tabName = "tab_one"
),
menuItem(
"Menu item 2",
icon = icon("globe"),
tabName = "tab_two"
)
)
})
}

shinyApp(ui, server)

问题

应用程序运行但模块未加载。问题:
  • 如何正确调用eventReactive在仪表板菜单项上? tab_item好像没有id参数为 tabName在那种情况下等效?
  • 链接的讨论是指刷新一个表。我正在尝试找出适用于包含大量接口(interface)元素和精细服务器调用的模块的示例。

  • 单击菜单项 2 应显示来自 的内容。 sample_module.R 文件。

    application layout

    1 Modularizing Shiny app code

    2 Google groups: activate module with actionButton

    更新

    我尝试使用以下语法显式强制模块进入应用程序环境加载:
    eventReactive(eventExpr = input$tab_two,
    valueExpr = callModule(sampleModuleServer, "sampleModule"),
    domain = MainAppDomain
    )

    在哪里
    MainAppDomain <- getDefaultReactiveDomain()

    最佳答案

    编辑:删除 Joe Cheng 的顶级声明:

    # Libs
    library(shiny)
    library(shinydashboard)

    # Source module
    source("sample_module.R")

    ui <- dashboardPage(
    dashboardHeader(title = "Dynamic sidebar"),
    dashboardSidebar(sidebarMenuOutput("menu")),
    dashboardBody(tabItems(
    tabItem(tabName = "tab_one", h1("Tab One")),
    tabItem(tabName = "tab_two", sampleModuleUI("sampleModule"))
    ))
    )

    server <- function(input, output) {

    observeEvent(input$tabs,{
    if(input$tabs=="tab_two"){
    callModule(sampleModuleServer, "sampleModule")
    }
    }, ignoreNULL = TRUE, ignoreInit = TRUE)

    output$menu <- renderMenu({
    sidebarMenu(id = "tabs",
    menuItem(
    "Menu item 1",
    icon = icon("calendar"),
    tabName = "tab_one"
    ),
    menuItem(
    "Menu item 2",
    icon = icon("globe"),
    tabName = "tab_two"
    )
    )
    })
    }

    shinyApp(ui, server)

    此外,您的 sidebarMenu需要一个 id 才能访问选定的选项卡;请查看 Shiny 仪表板 documentation .

    关于r - 仅在单击菜单项时加载 Shiny 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53049659/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com