首页 > 解决方案 > 单击按钮后如何将多个图像插入闪亮?

问题描述

我创建了一个闪亮的应用程序,它有两个按钮,如以下屏幕截图所示。单击“显示图像”按钮后,我想在闪亮的应用程序中显示此文件夹中的8 张图像。我尝试使用 renderImages 但无法让它工作。

这是我到目前为止的代码:

ui.R

fluidPage(
  # Application title
  titlePanel("For Fun!!"),
  hr(),
  sidebarLayout(
    # Sidebar with a slider and selection inputs
    sidebarPanel(
      actionButton("update", "Print Text"),
      hr(),
      actionButton("test", "Show Images")
    ),

    mainPanel(
      verbatimTextOutput("plot"),
      uiOutput("images")
    )
  )
)

server.r 

server <- function(input, output) {

  randomVals <- eventReactive(input$update, {
   myString="Hello!"
   myString
  })


  output$plot <- renderPrint({
    myString=randomVals()
    print(myString)
  })

}

这就是我正在寻找的输出:感谢您的时间

在此处输入图像描述

标签: rshiny

解决方案


像这样试试。

library(shiny)

server <- shinyServer(function(input, output) {
  output$files <- renderTable(input$files)

  files <- reactive({
    files <- input$files
    files$datapath <- gsub("\\\\", "/", files$datapath)
    files
  })


  output$images <- renderUI({
    if(is.null(input$files)) return(NULL)
    image_output_list <- 
      lapply(1:nrow(files()),
             function(i)
             {
               imagename = paste0("image", i)
               imageOutput(imagename)
             })

    do.call(tagList, image_output_list)
  })

  observe({
    if(is.null(input$files)) return(NULL)
    for (i in 1:nrow(files()))
    {
      print(i)
      local({
        my_i <- i
        imagename = paste0("image", my_i)
        print(imagename)
        output[[imagename]] <- 
          renderImage({
            list(src = files()$datapath[my_i],
                 alt = "Image failed to render")
          }, deleteFile = FALSE)
      })
    }
  })

})

ui <- shinyUI(fluidPage(
  titlePanel("Uploading Files"),
  sidebarLayout(
    sidebarPanel(
      fileInput(inputId = 'files', 
                label = 'Select an Image',
                multiple = TRUE,
                accept=c('image/png', 'image/jpeg'))
    ),
    mainPanel(
      tableOutput('files'),
      uiOutput('images')
    )
  )
))

shinyApp(ui=ui,server=server)

推荐阅读