Как вставить изображение в ячейку таблицы, используя 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
  })
})

Изображения, работающие с DT

Незначительное обновление с 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)

Другие вопросы по тегам