R Shiny从列表中反应显示图像

时间:2017-06-27 14:52:13

标签: r shiny reactive-programming

我正在尝试从R闪亮应用程序中的列表中反应性地显示图像。

我有很多.tiff图像存储在我的应用程序的“www”目录中。他们遵循命名惯例OHC_130.tiff,OHC_131.tiff,OHC_132.tiff,IHC_133.tiff,Deiter_134.tiff,OHC_135.tiff等......

我还有一个包含所有这些名称的载体

ImgID_Vector <- as.vector(c("OHC_130", "OHC_131", "OHC_132", "IHC_133", "Deiter_134", "OHC_135")

我想创建一个可选择的输入下拉列表,用户可以选择图像,然后单击提交按钮使图像显示在下方。我为ui.r设置了这个,但我不知道如何让它在服务器端工作。

#ui.r
library(shiny)
library(shinydashboard)

dashboardBody(
  tabItems(
    tabItem(tabName = "dt",
          h2("Select an image"),
          fluidRow(
            box(title="This is a searchable database of images", solidHeader = TRUE,status = "primary"),
            selectInput("input$ImageIDVariable1", label = h4("Enter your image of interest"), choices = (ImgID_Vector), multiple = TRUE),
            submitButton("Submit"),
            imageOutput("ImageID_Image")
          )
)
)

从概念上讲,我知道在服务器端我需要将用户输入从UI端连接到“www”文件夹中的实际图像。我应该能够使用反应性输入和renderImage来做到这一点。但我不知道如何编写渲染图像命令来实现所需的结果。

#server.r

#This is the data that contains the choices for the dropdown menu
ImgID_Vector <- readRDS("ImgID_Vector.RDS")

shinyServer(function(input, output) {
# This is where I am struggling, with the render image command
output$ImageID_Image <- renderImage({
    filename <- normalizePath(file.path('./www',
                          paste(input$ImageIDVariable1, '.tiff', sep='')))
    list(src = filename)
  }, deleteFile = FALSE)
}

#This is where I have the reactive input variable
ImageIDVariable1 <- reactive({input$ImageIDVariable1})

})

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

inputId的论据selectInput错误,应该是"ImageIDVariable1",而不是input$ImageIDVariable1

在ui.R:

selectInput(inputId = "ImageIDVariable1", label = h4("Enter your image of interest")

在server.R

input$ImageIDVariable1

此外:

您应该在名为global.R的脚本中使用此功能,或至少在ui.R中使用此功能:

ImgID_Vector <- readRDS("ImgID_Vector.RDS")

并且您不应该使用multiple = TRUE因为renderImage一次只能渲染一张图片。

默认情况下,您应该选择一个选项,否则renderImage会搜索不存在的图像。