Невозможно создать нереактивный объект RenderPlot с динамическими именами в R - PullRequest
0 голосов
/ 14 мая 2018

Я хочу создать plotOutput object, который создается динамически.

Я создал динамические объекты для рендеринга разных графиков, им переданы разные «Данные», поэтому график будет отличаться.

Функция renderPlot затем сохраняется в Graph1, Graph2, Graph3 и т. Д. Во сколько раз я был создан. Тогда элемент пользовательского интерфейса "w" имеет plotOutput из Graph1, Graph2 и т. Д.

Но когда я вызываю "w", последний график отображается и перезаписывается во всех объектах w.

Есть ли другой способ сделать это?

output[[paste0("Graph",i)]]<-{ renderPlot({ggplot2(Data,aes(x=xxval,y=yval)+geom_point() } 
w<-plotOutput(paste0("Graph",i),height=200,width=300)

1 Ответ

0 голосов
/ 14 мая 2018

вы хотите использовать для этого функцию insertUI. И я благодарю вас - я наконец нашел вариант использования, где вы должны поместить вывод в наблюдателя. Вот рабочий пример

library(ggplot2)

shinyApp(
  ui = fluidPage(
    column(
      width = 3,
      actionButton(
        inputId = "newGraph",
        label = "add Graph"
      ),
      selectInput(
        inputId = "xAxis",
        label = "x-axis",
        choices = colnames(mtcars)
      ),
      selectInput(
        inputId = "yAxis",
        label = "y-axis",
        choices = colnames(mtcars)
      )
    ),
    column(
      width = 9,
      id = "graph_wrapper"
    )
  ),
  server = function(input, output,session) {
  observeEvent(input$newGraph,{
    insertUI(
      selector = '#graph_wrapper',
      where = "beforeEnd",
      ui = plotOutput(
        outputId = paste0("plot",input$newGraph)
      ))
    xxval = input$xAxis
    yval = input$yAxis
    output[[paste0("plot",input$newGraph)]] = renderPlot({
      ggplot(mtcars,aes_string(x=xxval,y=yval))+geom_point() 
    })
  })  
  })
)

Надеюсь, это поможет!

...