gpt4 book ai didi

R Shiny Dashboard 在初始化时不会在 sidebarMenu 内加载渲染的 UI

转载 作者:行者123 更新时间:2023-12-04 09:26:46 24 4
gpt4 key购买 nike

我正在尝试根据用户希望提供的输入方式生成动态的 UI 元素。为简单起见,我正在使用 Shiny Dashboard,但我遇到了 sidebarMenu 的问题。以前,当我将静态 UI 元素直接放入 sidebarMenu 时,我没有问题,但是当尝试将动态 UI 元素放入 sidebarMenu 时,我遇到了问题。我正在使用 R 3.3.2 和 Shiny 1.0.0 以及仪表板 0.5.3。

我遇到的具体问题是,当程序第一次加载时,动态 UI 元素不会加载。代码中似乎没有任何阻碍,因为即使在卸载动态 UI 时,界面的所有功能也能正常工作。我可以通过选择导航栏中的选项卡之一来加载动态 UI,或者将鼠标悬停在我已经实现了工具提示的内容上。

我无法提供确切的代码,但我重新创建了一个小得多的可重现示例,该示例具有与我的较大版本相同的所有问题。

library("shiny")
library("shinydashboard")

header = dashboardHeader(
title = "Dynamic UI Example"
)
sidebar = dashboardSidebar(
sidebarMenu(
menuItemOutput("dynamic_sidebar")
)
)
body = dashboardBody(
tabBox(
tabPanel(
strong("One")
),
tabPanel(
strong("Two")
)
)
)
ui = dashboardPage(header, sidebar, body)

server = shinyServer(function(input,output,session){
output$dynamic_sidebar = renderMenu({
sidebarMenu(
menuItem(
"Slider or numeric problem",
radioButtons("slider_or_numeric",
label = "Slider or Numeric Input",
choices = c("Slider", "Numeric"),
selected = "Slider",
inline = TRUE
),
uiOutput("input")
)
)
})
output$input = renderUI({
if (input$slider_or_numeric == "Slider"){
sliderInput("slider",
label = "slider",
min = 0, max = 1,
value = 0
)
} else {
numericInput("numeric",
label = "numeric",
min = 0, max = 1,
value = 0
)
}
})
})

shinyApp(ui, server)

要验证问题,加载后只需打开菜单项,您将看到单选按钮,但没有其他内容。将导航栏上的选项卡从 1 切换到 2,输入应出现在菜单中(必须在菜单打开时完成)。

我真的只是捕获了这里的稻草,我已经解决了几个小时的问题,我认为这只是与这些功能的不兼容。我真的希望有人能证明我错了,告诉我我只是做错了。我已经为我的主程序找到了替代方案,但它们与我在这里尝试完成的工作没有相同的美感。

感谢您的任何帮助!

最佳答案

我想我发现了这个问题,这很棘手,我花了一段时间才找到它。虽然这是一个小改动,但我会发布整个内容。

我认为这就是你想要的:

library("shiny")
library("shinydashboard")

header = dashboardHeader(
title = "Dynamic UI Example"
)
sidebar = dashboardSidebar(
sidebarMenu(
menuItemOutput("dynamic_sidebar")
)
)
body = dashboardBody(
tabBox(
tabPanel(
strong("One")
),
tabPanel(
strong("Two")
)
)
)
ui = dashboardPage(header, sidebar, body)

server = shinyServer(function(input,output,session){
output$dynamic_sidebar = renderMenu({
sidebarMenu(
menuItem(
"Slider or numeric problem",
radioButtons("slider_or_numeric",
label = "Slider or Numeric Input",
choices = c("Slider", "Numeric"),
selected = "Slider",
inline = TRUE
)
),
uiOutput("input") # no longer in menuItem call
)
})
output$input = renderUI({
if (input$slider_or_numeric == "Slider"){
sliderInput("slider",
label = "slider",
min = 0, max = 1,
value = 0
)
} else {
numericInput("numeric",
label = "numeric",
min = 0, max = 1,
value = 0
)
}
})
})
shinyApp(ui, server)

我认为问题在于 uiOutput("input")不知何故溜进了 menuItem称呼。这对 Shiny 来说是一个危险,而 Shiny 编辑显然需要更多的支持来展示这种范围。

坦率地说,我有点困惑,为什么它会在你玩弄它时出现。不过够了...

虽然我不完全确定我是否理解您希望它如何工作(这显然只是一个玩具示例),但它现在在启动时的样子:

enter image description here

在菜单扩展和通过新暴露的单选按钮控件更改输入类型之后。

enter image description here

关于R Shiny Dashboard 在初始化时不会在 sidebarMenu 内加载渲染的 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080909/

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