R Shiny 中的图像幻灯片

Par*_*rag 4 r image slideshow shiny

我仍在学习 R,因此请该平台的专家帮助我。

我正在尝试在 Shiny 的面板中创建 .jpg 图像的幻灯片。当我在 RStudio 中运行时,下面的代码为我提供了 RStudio 绘图窗口中的幻灯片。

folder <- "D:/Photos/Foreign Trips/2014_07_08_USA_Irvine/JulyAugust/" 
file_list <- list.files(path=folder, pattern="*.jpg", full.names = TRUE)
for (j in 1:30) {
        myJPG <- stack(file_list[[j]])
        plotRGB(myJPG)
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将相同的代码放入 server.R 并尝试通过 ui.R 调用时,我没有看到幻灯片或任何图像被显示。单击“照片幻灯片”选项卡时,出现空白页面。我尝试使用 renderUI、renderImage 和 renderPlot,但没有任何效果。

用户界面

tabPanel("Photo Slides",
plotOutput("trvImg")
),
Run Code Online (Sandbox Code Playgroud)

服务器

output$trvImg <- renderPlot({
folder <- "D:/Photos/Foreign Trips/2014_07_08_USA_Irvine/JulyAugust/" 
file_list <- list.files(path=folder, pattern="*.jpg", full.names = TRUE)
for (j in 1:30) {
myJPG <- stack(file_list[[j]])
plotRGB(myJPG)
}
Run Code Online (Sandbox Code Playgroud)

作为一名学习者,我确信我在某个地方出错了,因此寻求您的帮助。

谢谢

Sté*_*ent 12

另一个解决方案,带有slickR包(基于slick javascript library)。

library(shiny)
library(slickR)

ui <- fluidPage(
   sidebarLayout(
      sidebarPanel(
        ####
      ),

      mainPanel(
         slickROutput("slickr", width="500px")
      )
   )
)

server <- function(input, output) {

  output$slickr <- renderSlickR({
    imgs <- list.files("D:/Photos/Foreign Trips/2014_07_08_USA_Irvine/JulyAugust/", pattern=".png", full.names = TRUE)
    slickR(imgs)
  })

}

# Run the application 
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Sté*_*ent 5

library(shiny)

imgs <- list.files("D:/Photos/Foreign Trips/2014_07_08_USA_Irvine/JulyAugust/", pattern=".png", full.names = TRUE)

ui <- fluidPage(

  titlePanel("Slideshow"),

  sidebarLayout(
    sidebarPanel(
      actionButton("previous", "Previous"),
      actionButton("next", "Next")
    ),

    mainPanel(
      imageOutput("image")
    )
  )
)

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

  index <- reactiveVal(1)

  observeEvent(input[["previous"]], {
    index(max(index()-1, 1))
  })
  observeEvent(input[["next"]], {
    index(min(index()+1, length(imgs)))
  })

  output$image <- renderImage({
    x <- imgs[index()] 
    list(src = x, alt = "alternate text")
  }, deleteFile = FALSE)
}

# Run the application 
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

如果您想要图像下方的按钮,您可以执行以下操作:

  sidebarLayout(
    sidebarPanel(
      # actionButton("previous", "Previous"),
      # actionButton("next", "Next")
    ),

    mainPanel(
      imageOutput("image"),
      fluidRow(
        column(1, offset=1, actionButton("previous", "Previous")),
        column(1, offset=1, actionButton("next", "Next"))
      )
    )
  )
Run Code Online (Sandbox Code Playgroud)