R Shiny动态输入和图表

时间:2014-08-28 09:17:34

标签: r dynamic shiny

我有一个Shiny UI,以每个绘图的两个绘图和相应的输入字段开头。一般结构看起来像这样:

<header>
<main>
  <plotarea1>
    <inputs1>
    <chart1>
  </plotarea1>
  <plotarea2>
    <inputs2>
    <chart2>
  </plotarea2>
</main>

我可以使用两个按钮动态添加和删除plotareas。这非常有效,只是如果我改变图表的数量就会重新渲染整个主区域。从计算的角度来看,这并不是那么糟糕(它只是渲染,而不是重新执行的数据获取)但是当重新渲染输入时,它们的值被重置为默认值。反过来,这也会迫使图表发生变化。

因此,我的问题是:如何动态添加一个plotarea(输入列表+图表),以便现有的plotareas不受此影响?

我说我必须隔离数字反应并手动触发渲染代码一旦我在添加/删除功能中手动添加了绘图区域。这意味着我保存了plotareas列表,然后只是向/从列表中追加/删除元素。然而,这导致了一些奇怪的错误(遗憾的是我不记得了)

server.R如下所示:

observe({
   lapply(1:numcharts(),function(i){
      output[[paste0("plot",i)]] <- renderPlot({
        dataset <- react[[paste0("dataset",i)]]()
        plotValues(dataset)
      })
   })    
})

observe({
    output$charts <- renderUI({
      lapply(1:numcharts(), function(i) {
        list(
          fluidRow(
            column(2,
                   selectInput(paste0("selectedInput",i),
                               label=paste("Select input",i),
                               choices=choices,
                               selected=choices[1]
                   )
            ),

            <more inputs>
          ),
          fluidRow(
            column(9,
               plotOutput(paste0("plot",i))
            )
          ) 
        )
      })
    })
})

numcharts是一个被动反应,它返回当前要绘制的绘图区域的数量,而数据集是一个被动的,它根据输入返回一个特定的数据集。 plotValues根据数据集创建一个图。

ui.R文件只是渲染输出$ charts。

此致 罗伯特

0 个答案:

没有答案