如何在Shiny R中使用动态创建的选项卡创建条件面板?

时间:2015-07-30 19:50:57

标签: r user-interface dynamic tabs shiny

好的,我可以动态创建为id分配值的标签,这样我就可以访问它们了。如果我想在特定的动态创建的选项卡上放置一些内容,我可以在UI中创建条件面板(通常可以找到它们),但是我无法找到在我的选项卡上动态创建条件面板的方法。

这是我的代码,我将在下面解释:

UI:

library(shiny)
shinyUI(navbarPage("TiGr",

                   tabPanel("File Input Page",
                            fluidPage("Input")),

                   tabPanel("Summary Statistics and Plots",
                            fluidPage("Statistics")),

                   tabPanel("Time Clusters",
                            fluidPage("cluster"),
                            actionButton("subClust", label = "Create Subcluster"),
                            uiOutput("tabs"),
                            uiOutput("condo"),
                            conditionalPanel(condition="input.level==1",
                                             numericInput('clusters', 'Cluster count', 9,
                                                          min = 1, max = 9)
                            ), 
                            conditionalPanel(condition="input.level==2",
                                             uiOutput("int1"))

                   )
))

服务器:

library(shiny)

shinyServer(function(input, output, session) {
  output$tabs=renderUI({

    Tabs<-as.list(rep(0,input$subClust+1))
    for (i in 0:length(Tabs)){
      Tabs[i]=lapply(paste("Layer",i,sep=" "),tabPanel,value=i)
    }
    do.call(tabsetPanel,c(Tabs,id="level"))
  })


  output$condo=renderUI({
    for (i in 1:input$subClust+1){
      conditionalPanel(condition=paste("input.level==",i,sep=""),
                       numericInput('clusters', 'Cluster count', 9,
                                    min = 1, max = 9))
    }
  })



  outVar<-reactive({
    vars <-input$clusters
    return(strtoi(vars))
  })
  output$int1=renderUI({
    numericInput('clusters1', 'Cluster count', outVar(),
                 min = 1, max = outVar())
  })

  condVar<-reactive({
    vars<-input$subClust
    return(strtoi(vars))
  })

}
)

因此,在UI中,重要性选项卡是时间群集选项卡。我有一个可以单击的按钮,可以创建新的标签页。然后我有选项卡输出并尝试自动条件面板输出(什么都不做)。

我明确定义了两个条件面板(我希望能够将这些全部放在uiOutput(“condo”)中,但是现在它们只是用于突出显式创建条件面板和尝试之间的结果差异动态地制作它们。

服务器页面有一个输出选项卡的方法,一个尝试创建条件面板的方法(什么都不做),以及一些与动态输入相关的方法。 (只要输入1发生变化,输入2就会复位到输入1)。

有人能解释我在服务器中的条件页面方法出错了吗? (这是R的显式形式的输出)

> conditionalPanel(condition="input.level==1",
+                  numericInput('clusters', 'Cluster count', 9,
+                               min = 1, max = 9))
<div data-display-if="input.level==1">
  <label for="clusters">Cluster count</label>
  <input id="clusters" type="number" value="9" min="1" max="9"/>
</div> 

这是R的尝试输出

> conditionalPanel(condition=paste("input.level==",1,sep=""),
+                  numericInput('clusters', 'Cluster count', 9,
+                               min = 1, max = 9))
<div data-display-if="input.level==1">
  <label for="clusters">Cluster count</label>
  <input id="clusters" type="number" value="9" min="1" max="9"/>
</div> 

1 个答案:

答案 0 :(得分:0)

好的,通过查看相关问题,我能够找到一个解决方案,即动态创建标签的问题。我只是将标签更改为条件页面并在最后使用主面板运行do.call以正确格式化我的条件页面。

我所学到的是,您只能使用一系列UI功能进行for循环,并期望它们弹出(遗憾的是,它并不像那样工作)。这是我的服务器代码发生了变化:

msbuild.exe