как загрузить другое изображение из другой папки, не используя только папку www в каталоге в rshiny?

#r #shiny #shinydashboard #shinyapps #rshiny

Вопрос:

Я создаю приложение для визуализации изображений с помощью rshiny. У меня есть 10 разных папок, и в каждой папке 300 изображений. Я не хотел помещать все эти 3000 изображений в одну папку www. Есть ли какой-либо способ, которым я могу закодировать в серверном скрипте, чтобы я мог перейти в относительную папку и найти нужное изображение, которое я ищу.

Я ищу официальный сайт rshiny, там написано:

 img(src = "my_image.png", height = 72, width = 72)

 

Функция img ищет файл изображения в определенном месте. Ваш файл должен находиться в папке с именем www в том же каталоге, что и сценарий app.R. Shiny относится к этому каталогу по-особому. Shiny будет делиться любым файлом, размещенным здесь, с веб-браузером вашего пользователя, что делает www отличным местом для размещения изображений, таблиц стилей и других вещей, которые потребуются браузеру для создания компонентов wep вашего приложения Shiny.

Я буду использовать пример веб-сайта rshiny

 library(shiny)
ui <- fluidPage(
  titlePanel("My Shiny App"),
  sidebarLayout(
    sidebarPanel(),
    mainPanel(
      img(src = "rstudio.png", height = 140, width = 400)
    )
  )
)

server <- function(input, output) {
  
}

shinyApp(ui = ui, server = server)
 

Однако вместо этого одно изображение в папке www. У меня есть 10 разных папок, и в каждой папке 300 изображений.

Я надеюсь, что смогу получить некоторую помощь. Спасибо!

Ответ №1:

Мы можем использовать renderImage() это, чтобы передать путь к папке. Вот пример:

 library(shiny)


ui <- fluidPage(
    titlePanel("My Shiny App"),
    sidebarLayout(
        sidebarPanel(textInput('image_path', label = 'File Path:'),
        actionButton('send_path', 'Get Image')),
        mainPanel(
            imageOutput('my_image'),
            imageOutput('my_path_image')
        )
    )
)

server <- function(input, output) {
 
    output$my_image <- renderImage({
        list(src = '~/test.png') #use ~ to acces the home folder.
    }, deleteFile = FALSE)
    
    observeEvent(input$send_path, {
        
    output$my_path_image <- renderImage({
        list(src = input$image_path) 
    }, deleteFile = FALSE)
    
    })
       
}

shinyApp(ui = ui, server = server)