R Shiny - 在 UI 中显示图像
R Shiny - display image in UI
我正在尝试从 www 文件夹加载图像(这部分有效),然后使用图像名称将其显示在 UI 中。当我尝试这样做时,出现以下错误:
警告:cat 中的错误:'cat'
无法处理参数 1(类型 'closure')
这是相当简单的代码
'''
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)
'''
任何帮助将不胜感激。
谢谢,
比尔.
您收到错误消息的原因是 renderText
是 return 反应函数而不是图像 HTML 标签。 reactive
不应出现在任何 render...
函数中。
正如@MrFlick 提到的,renderText
只会 return 一个字符串到 UI。 renderUI
和 uiOutput
的替代方法是 renderImage
和 imageOutput
。这些将以方便的方式将上传的图像添加到 UI,因为渲染函数只需要一个属性列表来提供 img
标记。这也允许轻松包含不在 www
目录中的图像。
在下面的解决方案中,我已将 req
包含在渲染函数中,这样在没有上传图像时就不会出现错误消息。
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)
我正在尝试从 www 文件夹加载图像(这部分有效),然后使用图像名称将其显示在 UI 中。当我尝试这样做时,出现以下错误: 警告:cat 中的错误:'cat'
无法处理参数 1(类型 'closure')这是相当简单的代码 '''
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)
'''
任何帮助将不胜感激。 谢谢, 比尔.
您收到错误消息的原因是 renderText
是 return 反应函数而不是图像 HTML 标签。 reactive
不应出现在任何 render...
函数中。
正如@MrFlick 提到的,renderText
只会 return 一个字符串到 UI。 renderUI
和 uiOutput
的替代方法是 renderImage
和 imageOutput
。这些将以方便的方式将上传的图像添加到 UI,因为渲染函数只需要一个属性列表来提供 img
标记。这也允许轻松包含不在 www
目录中的图像。
在下面的解决方案中,我已将 req
包含在渲染函数中,这样在没有上传图像时就不会出现错误消息。
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)