gpt4 book ai didi

r - 在 Shiny UI 中动态显示上传的图像

转载 作者:行者123 更新时间:2023-12-03 22:20:16 26 4
gpt4 key购买 nike

这与此处提出的问题几乎相同:
dynamically add plots to web page using shiny

但是,我没有生成可变数量的图(我已经成功完成了),而是尝试将选择的图像上传到应用程序中并在用户界面上显示它们。使用与上述问题相同的方法,我用下面的代码生成了我的应用程序。但只有第一张图像在 UI 中呈现。

我今天错过了什么明显的事情?

R 3.2.2 (Windows 7)
Shiny 0.12.2

server.R

library(shiny)

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

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


output$images <- renderUI({
image_output_list <-
lapply(seq_along(nrow(files())),
function(i)
{
imagename = paste0("image", i)
imageOutput(imagename)
})

do.call(tagList, image_output_list)
})

observe({
for (i in seq_along(nrow(files())))
{
local({
my_i <- i
imagename = paste0("image", my_i)
output[[imagename]] <-
renderImage({
list(src = files()$datapath[my_i],
alt = "Image failed to render")
}, deleteFile = FALSE)
})
}
})

})

ui.R
library(shiny)

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')
)
)
))

Image1.PNG
Image2.JPG
Image3.JPEG

最佳答案

你这么近!试试这个:

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)

我将 seq_along 更改为 1:nrow(files())seq_len(nrow(files()))seq_along(t(files())) 会起作用。

关于r - 在 Shiny UI 中动态显示上传的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com