Как вставить изображение в ячейку таблицы, используя DT, R и Shiny
Как можно вставить изображение в ячейку, созданную с помощью пакета DT, чтобы оно отображалось в приложении с использованием блестящего?
Мой пример основан на этом вопросе. R глянцевый: как поместить локальные изображения в блестящие таблицы
Пример кода ниже не отображает изображение, а только URL.
# ui.R
require(shiny)
library(DT)
shinyUI(
DT::dataTableOutput('mytable')
)
# Server.R
library(shiny)
library(DT)
dat <- data.frame(
country = c('USA', 'China'),
flag = c('<img src="test.png" height="52"></img>',
'<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_the_People%27s_Republic_of_China.svg/200px-Flag_of_the_People%27s_Republic_of_China.svg.png" height="52"></img>'
)
)
shinyServer(function(input, output){
output$mytable <- DT::renderDataTable({
DT::datatable(dat)
})
})
3 ответа
Решение
Вы можете использовать escape = FALSE
в вашем вызове DT, согласно: https://rstudio.github.io/DT/
# ui.R
require(shiny)
library(DT)
shinyUI(
DT::dataTableOutput('mytable')
)
# Server.R
library(shiny)
library(DT)
dat <- data.frame(
country = c('USA', 'China'),
flag = c('<img src="test.png" height="52"></img>',
'<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_the_People%27s_Republic_of_China.svg/200px-Flag_of_the_People%27s_Republic_of_China.svg.png" height="52"></img>'
)
)
shinyServer(function(input, output){
output$mytable <- DT::renderDataTable({
DT::datatable(dat, escape = FALSE) # HERE
})
})
Незначительное обновление с 2021 года:
# ui.R
require(shiny)
library(DT)
shinyUI <- DT::dataTableOutput('mytable')
# Server.R
library(shiny)
library(DT)
dat <- data.frame(
country = c('China'),
flag = c('<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_the_People%27s_Republic_of_China.svg/200px-Flag_of_the_People%27s_Republic_of_China.svg.png" height="52"></img>'
)
)
shinyServer <- function(input, output){
output$mytable <- DT::renderDataTable({
DT::datatable(dat, escape = FALSE) # HERE
})
}
shinyApp(shinyUI, shinyServer)
Решение, которое сработало для меня, было следующим: функция была назначена на ShinyServershinyServer <- function
вместо более раннего способа использованияshinyServer(function(input,output)