首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从使用shinyDirChoose加载的文件夹渲染用于交互显示的图像

在 R Shiny 应用中,你可以使用 shinyFiles 包中的 shinyDirChoose 函数来选择文件夹,并从该文件夹中加载图像进行交互显示。以下是一个完整的示例,展示了如何实现这一功能。

安装必要的包

首先,确保你已经安装了 shinyshinyFiles 包:

代码语言:javascript
复制
install.packages("shiny")
install.packages("shinyFiles")

创建 Shiny 应用

以下是一个完整的 Shiny 应用示例:

代码语言:javascript
复制
library(shiny)
library(shinyFiles)

ui <- fluidPage(
  titlePanel("Image Viewer"),
  sidebarLayout(
    sidebarPanel(
      shinyDirButton("dir", "Choose Directory", "Please select a directory"),
      uiOutput("file_selector")
    ),
    mainPanel(
      imageOutput("image_display")
    )
  )
)

server <- function(input, output, session) {
  volumes <- c(Home = fs::path_home(), getVolumes()())
  
  shinyDirChoose(input, "dir", roots = volumes, session = session)
  
  selected_dir <- reactive({
    parseDirPath(volumes, input$dir)
  })
  
  output$file_selector <- renderUI({
    req(selected_dir())
    files <- list.files(selected_dir(), pattern = "\\.(jpg|jpeg|png|gif)$", full.names = TRUE)
    selectInput("file", "Choose an image file", choices = files)
  })
  
  output$image_display <- renderImage({
    req(input$file)
    list(src = input$file, contentType = 'image/png', alt = "Selected Image")
  }, deleteFile = FALSE)
}

shinyApp(ui, server)

解释

  1. UI 部分
    • shinyDirButton("dir", "Choose Directory", "Please select a directory"):创建一个按钮,用于选择文件夹。
    • uiOutput("file_selector"):动态生成文件选择器。
    • imageOutput("image_display"):用于显示选定的图像。
  2. Server 部分
    • volumes <- c(Home = fs::path_home(), getVolumes()()):定义可用的根目录。
    • shinyDirChoose(input, "dir", roots = volumes, session = session):初始化文件夹选择器。
    • selected_dir <- reactive({ parseDirPath(volumes, input$dir) }):解析选定的文件夹路径。
    • output$file_selector <- renderUI({ ... }):动态生成文件选择器,列出选定文件夹中的图像文件。
    • output$image_display <- renderImage({ ... }):渲染选定的图像文件。

运行应用

将上述代码保存为 app.R 文件,然后在 R 控制台中运行:

代码语言:javascript
复制
shiny::runApp("path/to/your/app.R")

这将启动 Shiny 应用,允许你选择一个文件夹并从中选择图像进行显示。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券