Я пытаюсь отобразить в другом кадре результаты сохраненных графиков. Я попробовал 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)
Я не знаком с модулями, но думаю, что это то, что мне нужно. Как лучше всего с этим справиться?