我正在尝试使用通过 Shiny 的下拉菜单插入和退出的 slider 制作一个响应式(Reactive) UI。我有一个带有响应式 UI slider 的服务器(server.R):
library(shiny)
shinyServer(function(input, output) {
output$slider1 <- reactiveUI(function() {
sliderInput("s1", "slide 1", min = 1, max = 100, value = 1)
})
output$slider2 <- reactiveUI(function() {
sliderInput("s2", "slide 2", min = 1, max = 100, value = 1)
})
})
我可以使用以下代码(ui.R)正常运行服务器:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Hello Shiny!"),
sidebarPanel(
selectInput("dataset", "number of buckets:",
choices = c(1,2,3)),
conditionalPanel(
condition = "input.dataset==2",
uiOutput("slider1"),uiOutput("slider2")),
conditionalPanel(
condition = "input.dataset==1",
sliderInput("s1", "slide 1", min = 1, max = 100, value = 1)
)
),
mainPanel(
)
))
但是如果我尝试让两个条件面板都调用 uiOutput,服务器会卡住:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Hello Shiny!"),
sidebarPanel(
selectInput("dataset", "number of buckets:",
choices = c(1,2,3)),
conditionalPanel(
condition = "input.dataset==2",
uiOutput("slider1"),uiOutput("slider2")),
conditionalPanel(
condition = "input.dataset==1",
uiOutput("slider1")
)
),
mainPanel(
)
))
我玩过这个,发现任何时候使用相同的条件变量和多个 uiOutput 调用都会发生这种情况。有什么建议么?谢谢。
最佳答案
请参阅@Joe 的评论以获取答案。
基本上,outputID
s 和 inputIDs
必须是独一无二的;同一页面上具有相同 ID 的两个 UI 元素发出并出错。这是 Shiny 的 react 性的限制。
@Jim 的解决方法是为客户端使用的每个输出或输入创建多个元素,例如
output$slider2_1 <- ...
output$slider2_2 <- ...
关于r - Shiny 的 reactiveUI 挂起,同时对同一条件变量进行多个 uiOutput 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14734041/