2016-11-03 2 views
1

잘 작동하는 tabPanels 세트 (아래의 코드 블록 1)가 있지만 시작시 조건을 기반으로 tabPanels을 추가하거나 제거 할 수 있도록 동적으로 만들고 싶습니다. . 아래 2 블록에서 내가 가지고있는 라인을 따라 뭔가가 있습니다 (하지만 작동하지 않습니다). 나는 사람들이 이것이 가능하지 않다고 말한 곳으로 몇 가지 링크를보고 있지만 길이 있어야하는 것 같습니다. 실제로는 시작시 tabPanels를 포함 시키거나 포함시키지 않아도되고 실제로 동적 일 필요는 없습니다.Dynamic navbarMenu tabPanels in R Shiny

tabsetPanel : R Shiny - add tabPanel to tabsetPanel dynamically (with the use of renderUI)과 가까운 예제를 참조하십시오. 그리고 여기 그것은 불가능 말한다 : reactive tabPanel in a navbarMenu in Shiny

블록 1 : 작동하지만

동적
library(shiny) 
runApp(list(
    ui = navbarPage(

    tabPanel("a" 

    ), 
    tabPanel("b"), 
    navbarMenu('g', 
       tabPanel("c"), 
       tabPanel("d") 
    ) 
), 
    server = function(input, output, session){ 


    } 
)) 

블록이 없습니다 : 나는 이런 식으로 뭔가를 할 -이 작동하지 않습니다

library(shiny) 
runApp(list(
    ui = navbarPage(

    tabPanel("a" 

    ), 
    tabPanel("b"), 
    navbarMenu('g', 
       uiOutput('tabs') 
    ) 
), 
    server = function(input, output, session){ 

    output$tabs <- renderUI({ 

     listoftabs <- c("c", "d") 
     lapply(listoftabs, tabPanel) 

    }) 
    } 
)) 

reactive tabPanel in a navbarMenu in Shiny

+0

을 드롭 할 수 있도록 단지 약간 navbarMenu 기능을 재 작성하는 솔루션이다. 기존의'navbarMenu' 나'tabsetPanel' ('renderUI' 안에'tabsetPanel'을 가지고있는 예제)에'tabPanel'을 단순히 추가 할 수는 없습니다. –

+0

테스트 해 보셨습니까? 나는 이것의 많은 다른 변이를 시험하고 아무도는 작동하는 것을 보이지 않는다. navUIMenu는 renderUI 내에서 전혀 작동합니까? – ZRoss

+0

죄송합니다.'navbarMenu'가 작동하지 않습니다. 그 이유는'navbarMenu'가'navbarPage'의 일부이기 때문입니다. 'navbarPage' 안에'navbarMenu'를 넣으면 두 개의 HTML 요소를 생성합니다 : 하나는 메뉴 링크를위한 것이고 다른 하나는 실제 패널'div'를위한 것입니다. 'renderUI'와 함께 사용하면'div' 패널 만 나타납니다. 역학을 원한다면, 전체'navbarPage'를 다시 렌더링해야합니다. –

답변

0

@warmoverflow (감사합니다!) ifelse를 사용하면 매우 제한된 수의 탭으로 작업 할 수 있지만 포함 시키거나 제외시키려는 탭이 가운데 탭이면 쉼표를 사용하면 제대로 작동하지 않습니다. 여기 당신이 탭 회의 당신이`renderUI` 내부에`narbarMenu`을 둘 필요 조건

library(shiny) 
runApp(list(
    ui = navbarPage(

    tabPanel("a" 

    ), 
    tabPanel("b"), 
    f('g', drop = ifelse(1==1, 2, 3), 
       tabPanel("first"), 
       tabPanel("firstinside"), 
       tabPanel("secondinside"), 
       tabPanel("last") 
    ) 
), 
    server = function(input, output, session){ 


    } 
)) 



f <- function (title, drop , ..., icon = NULL) 
{ 
    structure(list(title = title, tabs = list(...)[-drop], iconClass = shiny:::iconClass(icon)), 
     class = "shiny.navbarmenu") 
}