Ich erstelle gerade eine shiny
App, irgendwo in meiner App erwarte ich eine beliebige Anzahl von Eingaben, die der Benutzer aus einer Zeile von selectInput()
Widgets angeben kann.Ausblenden von Widgets, die in einer TagListe in shiny erstellt wurden
Da die Anzahl der selectInput()
Widgets möglicherweise groß ist, möchte ich, dass die nächsten selectInput()
Widget zeigt nur, wenn die vorherige ist vom Benutzer gefüllt.
Meine Idee ist, dass ich will:
- schaffen alle möglichen
selectInput()
Widgets in einemtagList
, - sie alle standardmäßig ausblenden und
- zeigen die nächste, wenn der vorherige gefüllt ist.
Ich bin gut mit dem ersten und den dritten Schritt, aber als ich versuchte, sie all hide
mit der shinyjs
Funktion zu verstecken, wie es scheint es nicht für die Eingabe von Objekten in einem tagList
erstellt funktioniert, es funktioniert nur für die Widgets dass mit einem bestimmten Namen erstellt wird, finden Sie im folgenden Beispiel:
library(shiny)
library(shinyjs)
ui <- fluidPage(
# Application title
titlePanel("Hello Shiny!"),
sidebarLayout(
# Sidebar with a slider input
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 0,
max = 1000,
value = 500)
),
# Show a plot of the generated distribution
mainPanel(
useShinyjs(),
uiOutput('comparisons')
)
)
server <- shinyServer(function(input, output, session) {
observe(1, shinyjs::hide('compare_1'))
output$comparisons=renderUI({
out=tagList()
out=lapply(1:6, function(x){
selectizeInput(paste0('compare_',x),
label = 'Condition 1',
c('aa','bb', 'cc'))
})
out
})
})
shinyApp(ui, server)
Say ich erstelle 6 selectInput
Widgets, nennen sie compare_1
-compare_6
, habe ich auch sliderInput
ein genannt obs
nur als ein Beispiel zu zeigen. In Server, wenn ich nur shinyjs::hide('obs')
sage, wird die sliderInput
ausgeblendet werden, aber wenn ich shinyjs::hide('compare_1')
aufrufen, ist die selectInput
immer noch da. Jede Idee wird geschätzt!
Das ist eine schöne Lösung ist! – Florian
Dies ist genau das, was ich gesucht habe, danke !! – Sni