РЕДАКТИРОВАТЬ:
Вот рабочее решение, использующее блестящий JS:
library(shinydashboard)
library(shinyjs)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
useShinyjs(),
uiOutput("slider1"),
uiOutput("slider2")
),
dashboardBody(
tabsetPanel(
id = 'testingDPEtab',
tabPanel("slider1Tab"),
tabPanel("slider2Tab")
)
)
)
server <- function(input, output) {
shinyjs::hide(id="slider1")
shinyjs::hide(id="slider2")
output$slider1<-renderUI({
sliderInput("slider1", label = h3("Slider1"), min = 0,
max = 100, value = 50)
})
output$slider2<-renderUI({
sliderInput("slider2", label = h3("Slider2"), min = 0,
max = 200, value = 50)
})
observe({
if(input$testingDPEtab == "slider1Tab"){
shinyjs::show(id="slider1")
shinyjs::hide(id="slider2")
} else {
shinyjs::hide(id="slider1")
shinyjs::show(id="slider2")
}
})
}
shinyApp(ui, server)
Это может быть лучше, если вы хотите сохранить свой слайдер (то есть спрятать его) вместо повторного рендеринга.
ОРИГИНАЛЬНЫЙ ПОЧТА
Я собирался предложить использовать inyJs , но я не смог заставить его работать - возможно, потому что ползунки настраиваются вна стороне сервера, а не в пользовательском интерфейсе?
Поэтому я выбрал альтернативный подход и обернул ваши 2 вызова функции renderUI в событие наблюдаем ().Я использую оператор if / else, чтобы включить или отключить один элемент управления на основе выбранной вкладки.Кажется, работает нормально.
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
uiOutput("slider1"),
uiOutput("slider2")
),
dashboardBody(
tabsetPanel(
id = 'testingDPEtab',
tabPanel("slider1Tab"),
tabPanel("slider2Tab")
)
)
)
server <- function(input, output) {
observe({
if(input$testingDPEtab == "slider1Tab"){
output$slider1<-renderUI({
sliderInput("slider1", label = h3("Slider1"), min = 0,
max = 100, value = 50)
})
output$slider2<-NULL
} else {
output$slider1<-NULL
output$slider2<-renderUI({
sliderInput("slider2", label = h3("Slider2"), min = 0,
max = 200, value = 50)
})
}
})
}
shinyApp(ui, server)