У меня есть блестящее приложение, которое использует fileInput
и magick
, чтобы прочитать выбранное пользователем изображение и отобразить его в виде ggplot.
library(shiny)
library(magick)
library(ggplot2)
ui <- fluidPage(
titlePanel(""),
sidebarLayout(
sidebarPanel(
fileInput("current_image", "Choose image file")),
mainPanel(
plotOutput("current_image_plot")
)
)
)
server <- function(input, output) {
output$current_image_plot <- renderPlot({
req(input$current_image)
myplot <- magick::image_read(input$current_image$datapath)
myplot <- image_ggplot(myplot)
return(myplot)
})
}
shinyApp(ui = ui, server = server)
Однако я бы хотел отделить логику c чтения изображения от логики c построения изображения. Я попытался поместить image_read
в его собственный observeEvent
, но это выдало ошибку The 'image' argument is not a magick image object.
Я знаю, что когда я печатаю class(myplot)
в observeEvent
, он возвращает объект magick-image
Так что же изменилось к тому времени, когда я пытаюсь получить доступ к active_image
?
library(shiny)
library(magick)
library(ggplot2)
ui <- fluidPage(
titlePanel(""),
sidebarLayout(
sidebarPanel(
fileInput("current_image", "Choose image file")),
mainPanel(
plotOutput("current_image_plot")
)
)
)
server <- function(input, output) {
active_image <- observeEvent(input$current_image, {
req(input$current_image)
myplot <- magick::image_read(input$current_image$datapath)
return(myplot)
})
output$current_image_plot <- renderPlot({
req(input$current_image)
myplot <- image_ggplot(active_image)
return(myplot)
})
}
shinyApp(ui = ui, server = server)