insertUI
hereを使用することをお勧めしました。次のコードでは、insertUI
を使用して1つまたは複数の要素のコントロールウィジェットを生成することができますが、removeUI
関連部分を組み込むことになります。 jQuery
は、挿入されたUI要素を削除するオプションを試しましたが、うまくいきませんでした。私はShiny dynamic UIから次のコードを見つけました:1つの呼び出しで複数の要素を挿入する場合は、tagList()またはタグ$ div()で囲む必要があります(後者のオプションは、後で参照や削除を容易にするためのIDを与える)。また、comments hereはいくつかの手がかりを与えました。つまり、tags$div(id="sepal.width.div", sliderInput("sepal.width.slider", ...))
ですが、私の欠如はHTML
/CSS
です。私は、(a)複数のウィジェット要素をタグ$ div()でラップして、各変数に一意のIDを割り当てています。これはremoveUI
で使用されます。 (b)removeUI
で複数の要素を呼び出す。
varnames <- names(iris[,1:4]) # names
varinit <- apply(iris[,1:4],2,median) # initival value used in slider
varmin <- apply(iris[,1:4],2,min) # min.
varmax <- apply(iris[,1:4],2,max) # max.
ListofSelVars <<- vector(mode="character")
# control widgets for all elements
allControls <- lapply(setNames(varnames, varnames), function(x) {
sliderInput(x, x, varmin[x], varmax[x], c(varmin[x], varinit[x]),
round = -2)
})
ui <- navbarPage(
tabPanel("Plot",
sidebarLayout(
sidebarPanel(
checkboxGroupInput("ConditioningVariables", "Conditioning variables (choose one or more):",
varnames,inline = TRUE),
# add an action button
actionButton("add", "Update UI elements")
),
mainPanel()
)
)
)
server <- function(input, output, session) {
observeEvent(input$add, {
insertUI(
selector ='#add',
where = "afterEnd",
ui = allControls[setdiff(input$ConditioningVariables,ListofSelVars)]
)
## removeUI related goes, here
## removeUI(selector=paste0())
## setdiff(ListofSelVars,input$ConditioningVariables) gives elements to be removed
## Global variable, keep track of elements that are selected
ListofSelVars <<- input$ConditioningVariables
})
}
shinyApp(ui, server)
説明は便利です。すばらしいです。 – SatishR