Ich versuche, ein Bild aus dem www-Ordner zu laden (dieser Teil funktioniert) und verwende dann den Bildnamen, um es in der Benutzeroberfläche anzuzeigen. Wenn ich dies versuche, erhalte ich die folgende Fehlermeldung:
Warnung: Fehler in Katze: Argument 1 (Typ „Schließung") kann nicht von „Katze" behandelt werden
Hier ist der ziemlich einfache Code '''
library(shiny)
library(imager)
setwd("E:/CIS590-03I Practical Research Project/Project")
# ui object
ui <- fluidPage(
titlePanel(p("Dog Breed Classification", style = "color:#3474A7")),
sidebarLayout(
sidebarPanel(
fileInput("image",
"Select your image:", placeholder = "No file selected"),
tags$head(
tags$style("body.sidebar {background-color: white; }",
".well {background-color: white;}"),
),
p("Image to categorize"),
),
mainPanel(htmlOutput("testHTML"),
)
)
)
# server()
server <- shinyServer(function(input, output) {
output$testHTML <- renderText({
paste("<b>Selected image file is: ", input$image$name, "<br>")
reactive(img(
src = input$image$name,
width = "250px", height = "190px"
))
})
})
# shinyApp()
shinyApp(ui = ui, server = server)
'''
Jede Hilfe wird sehr geschätzt. Danke Bill.
Lösung des Problems
Der Grund, warum Sie die Fehlermeldung erhalten, liegt darin, dass renderText
anstelle des Bild-HTML-Tags eine reaktive Funktion zurückgegeben wird. reactive
sollte in keiner render...
Funktion erscheinen.
Wie @MrFlick erwähnt hat, renderText
wird nur eine Zeichenfolge an die Benutzeroberfläche zurückgegeben. Eine Alternative für renderUI
und uiOutput
ist renderImage
und imageOutput
. Diese fügen das hochgeladene Bild auf bequeme Weise zur Benutzeroberfläche hinzu, da die Renderfunktion nur eine Liste von Attributen benötigt, um das img
Tag zu geben. Dies ermöglicht auch das einfache Einfügen von Bildern, die sich nicht im www
Verzeichnis befinden.
In der Lösung unten habe ich req
die Renderfunktionen eingebaut, damit keine Fehlermeldungen erscheinen, wenn kein Bild hochgeladen wurde.
library(shiny)
ui <- fluidPage(
tags$head(
tags$style(
".sidebar {background-color: white;}",
".well {background-color: white;}",
".title-text {color: #3474A7;}"
)
),
h2(
class = "title-text",
"Dog Breed Classification"
),
sidebarLayout(
sidebarPanel(
fileInput(
"image",
"Select your image:",
placeholder = "No file selected"
),
p("Image to categorize")
),
mainPanel(
tags$p(textOutput("filename", container = tags$b)),
imageOutput("testHTML")
)
)
)
server <- function(input, output) {
output$filename <- renderText({
req(input$image)
paste("Selected image file is:", input$image$name)
})
output$testHTML <- renderImage({
req(input$image)
list(
src = input$image$datapath,
width = "250px",
height = "190px"
)
}, deleteFile = TRUE)
}
shinyApp(ui = ui, server = server)
Keine Kommentare:
Kommentar veröffentlichen