Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用侧边栏面板附加和删除选项卡_R_Button_Shiny - Fatal编程技术网

R 使用侧边栏面板附加和删除选项卡

R 使用侧边栏面板附加和删除选项卡,r,button,shiny,R,Button,Shiny,在删除新创建的选项卡时遇到问题 情景: 添加新选项卡“A” 添加新选项卡“B” 单击选项卡B上的删除-不删除 选择选项卡A,单击“删除”即可 我觉得这和身份证有关,被逻辑难住了 提前谢谢 library(shiny) library(shinyjs) ui <- fluidPage( useShinyjs(), navbarPage(title = "Test", id="tabs", t

在删除新创建的选项卡时遇到问题

情景:

  • 添加新选项卡“A”
  • 添加新选项卡“B”
  • 单击选项卡B上的删除-不删除
  • 选择选项卡A,单击“删除”即可
  • 我觉得这和身份证有关,被逻辑难住了

    提前谢谢

    library(shiny)
    library(shinyjs)
    
    ui <- fluidPage(
      useShinyjs(),
      navbarPage(title = "Test", id="tabs",             
                 tabPanel("Home",
                          sidebarPanel(
                            selectInput("testlist", "Select test:", 
                                        list("A", "B", "C")),
                            actionButton("append", "New tab")),
                         
                          mainPanel()
                 )
      )
    )
    
    
    server <- function(input, output, session) {
    
    tabnamesinput<-reactive({
                             input$testlist
                            })
      
      
    observeEvent(input$append,{
      id<-paste0(tabnamesinput()) 
      appendTab(inputId = "tabs",
                tabPanel(id,
                         sidebarPanel(
                           actionButton("remove", "Delete")
                         )
      )
      )
    })
    
    observeEvent(input$remove,{
      removeTab(inputId = "tabs", target = input$tabs)
    })
    }
    
    shinyApp(ui, server)
    
    
    库(闪亮)
    图书馆(shinyjs)
    
    ui使用上述方法,您试图为每个删除按钮分配相同的
    id=“remove”
    。这行不通。每个按钮都需要自己的
    id

    一旦每个按钮都有其唯一的id,您就需要一个观察员来监听这些按钮触发的所有事件。下面将查找与模式“^remove”
    ”匹配的所有输入:

    库(闪亮)
    图书馆(shinyjs)
    
    非常感谢您的详细回复。你的gif/视频太棒了!
    library(shiny)
    library(shinyjs)
    
    ui <- fluidPage(
      useShinyjs(),
      navbarPage(title = "Test", id = "tabs",             
                 tabPanel("Home",
                          sidebarPanel(
                            selectInput("testlist", "Select test:", list("A", "B", "C"), selected = "A"),
                            actionButton("append", "New tab")),
                          mainPanel()
                 )
      )
    )
    
    
    server <- function(input, output, session) {
      
      observeEvent(input$append,{
        appendTab(inputId = "tabs",
                  tabPanel(input$testlist,
                           sidebarPanel(
                             actionButton(paste0("remove_", input$testlist), "Delete")
                           )
                  )
        )
      })
      
      observeEvent(lapply(grep(pattern = "^remove_", x = names(input), value = TRUE), function(x){input[[x]]}),{
        if(input$tabs != "Home"){
          removeTab(inputId = "tabs", target = input$tabs)
          updateSelectInput(session, "testlist", selected = input$testlist) # keep the selection when re-rendering sidebarPanel
        }
      })
    }
    
    shinyApp(ui, server)