Я задал этот вопрос в сообществе RStudio и не получил помощи, поэтому пробую здесь:
Я пытаюсь добавить следующие функции в свое приложение: Когдапользователь вставляет график, должна появиться кнопка удаления, которая специально удаляет график, который был вставлен одновременно.Приложение основано на insertUI и removeUI.
Это пример приложения.
library(shiny)
library(shinydashboard)
# Example data
a<-(letters)
b<-rnorm(length(letters), 4,2)
c<-rnorm(length(letters), 10,15)
d<-c(1:10,20:30,45:49)
data<-data.frame(a,b,c,d)
names(data)<-c("name","v1","v2","v3")
# UI
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
actionButton("add", "Add"),
radioButtons("add_elements","", c("Element1", "Element2"))
),
dashboardBody(
fluidRow( tags$div(id="placeholder")
)
))
# Server Logic
server <- function(input, output, session) {
# Initialize empty vector
inserted<- c()
# Observer
observeEvent(input$add, {
id_add <- paste0(input$add, input$add_elements)
insertUI(selector = '#placeholder', where = "afterEnd",
ui= switch(input$add_elements,
'Element1'= plotOutput(id_add),
'Element2' = plotOutput(id_add))
)
output[[id_add]] <-
if (input$add_elements == "Element1")
renderPlot({
plot(data[,1],data[,2])
}) else if (input$add_elements == "Element2")
renderPlot({
plot(data[,1],data[,4])
})
inserted <<- c(id_add,inserted)
insertUI(
selector = "#placeholder",
where = "afterEnd",
ui = tags$div(actionButton("remove_button", "Remove"))
)})
## Remove Elements ###
observeEvent(input$remove_button, {
removeUI(
selector = paste0('#', inserted[length(inserted)])
)
inserted <<- inserted[-length(inserted)]
})
}
shinyApp(ui = ui, server = server)
При вставке графика он получает идентификатор, например 1Element1 или 2Element2.Теперь мне интересно, как кнопка удаления может ссылаться только на график с этим точным идентификатором?
До сих пор я работал с одной кнопкой удаления, которая удаляет последний вставленный график, определяя вектор, в котором хранятся идентификаторы.,
selector = paste0('#', inserted[length(inserted)])
Это не очень полезно, когда пользователю нужно сравнить много графиков.У меня ограниченное понимание использования этих селекторов, и я совершенно не представляю, как можно использовать кнопку удаления для каждого графика, который удаляет только соответствующий график.Любая помощь будет принята с благодарностью.
Кроме того, эта ссылка может помочь, поскольку она показывает аналогичную функциональность (которую я, очевидно, не смог реализовать).