Создать список выходов в очереди - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь отобразить в другом кадре результаты сохраненных графиков. Я попробовал insertUI, который отображает один график, а не два, если, например, мне нужно два (я тестировал эти объекты echarts). Я резюмирую свою проблему в этом примере. Для примера вам нужно будет создать папку temp для созданных файлов.

#rm(list = ls(all.names = TRUE))
library(shiny)
library(here)
library(echarts4r)

dashboard.queue.objects <- function(button){
  res <-list.files(here::here("temp"), pattern="*.RDS",full.names = FALSE)
  l <- list()
  for (i in res){
    if (i == "plot.RDS") l <- c(l,"echarts4rOutput('plot.second'),")
  }
  l<-paste(unlist(l),collapse = '')
  l<-paste("flowLayout(id='id",button,"',",substr(l,0,nchar(l)-1),")",sep="")
  return(l)
}

if(length(list.files(here::here("temp"), pattern="*.RDS",full.names = TRUE))>0) do.call(file.remove, list(list.files(here::here("temp"), pattern="*.RDS",full.names = TRUE)))
ui <- fluidPage(
                tabsetPanel(tabPanel("one",
                                     actionButton("button","Add to a dashboard"),
                                     sliderInput("n","Number of observations:",value = 50,min = 1,max = 100),
                                     mainPanel("",
                                               verbatimTextOutput("printValButton"),
                                               echarts4rOutput("plot.one"))),
                            tabPanel("second",uiOutput("dashboard"))
                )
)

server <- function(input,output,session){

  d <- reactive({
    data.frame(x=seq(input$n),y=rnorm(input$n,10,3))
  })

  output$printValButton <- renderPrint({input$button})

  output$plot.one <- renderEcharts4r({
    res<- d() %>% e_charts(x) %>% e_line(y)
    saveRDS(object = res,file = "temp/plot.RDS")
    res
  })

  output$plot.second <- renderEcharts4r({if (file.exists("temp/plot.RDS")) readRDS(file = "temp/plot.RDS")})

  output$dashboard <- renderUI({
    if (input$button!= 0) eval(parse(text=dashboard.queue.objects(input$button)))
  })
}

shinyApp(ui=ui,server=server)

Я не знаком с модулями, но думаю, что это то, что мне нужно. Как лучше всего с этим справиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...