Shiny: визуализировать динамическое количество изображений от места назначения - PullRequest
1 голос
/ 04 июля 2019

Мне нужно визуализировать динамическое количество изображений от места назначения.Но в результате через цикл я рендерил несколько раз только последнее изображение из пункта назначения.Но все изображения должны быть разными.

Мое решение вдохновлено этими ответами от stackoverflow

Блестящий: Динамическое число выходных элементов / графиков

динамически добавлять графики на веб-страницу, используя блестящие

library(shiny)

# get all files from destination
images <- list.files("charts")
image_names <- str_replace_all(images, ".png", "")


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


  output$images <- renderUI({

    image_output_list <- 
      lapply(1:length(image_names),
             function(i)
             {
               imagename = paste0(image_names[i], "_image")
               imageOutput(imagename)             

             })

    do.call(tagList, image_output_list)
  })

  observe({
    # if(is.null(input$files)) return(NULL)
    for (i in 1:length(image_names))
    {
      print(i)
      local({
        imagename <- paste0(image_names[i], "_image")
        print(imagename)
        output[[imagename]] <- 
          renderImage({
            list(src = normalizePath(paste0('charts/', image_names[i], '.png')))
          }, deleteFile = FALSE)
      })
    }
  })

})

ui <- shinyUI(fluidPage(
  titlePanel("Sidebar"),
  sidebarLayout(
    sidebarPanel(),
    mainPanel(
      uiOutput('images')
    )
  )
))

shinyApp(ui=ui,server=server)

1 Ответ

1 голос
/ 04 июля 2019

Не могли бы вы попробовать это:

  observe({
    for (i in 1:length(image_names))
    {
      local({
        ii <- i
        imagename <- paste0(image_names[ii], "_image")
        print(imagename)
        output[[imagename]] <- 
          renderImage({
            list(src = normalizePath(paste0('charts/', image_names[ii], '.png')))
          }, deleteFile = FALSE)
      })
    }
  })
...