RShiny: создание таблицы данных, которая позволяет отображать изображение в ячейке и выполнять фильтрацию сверху - PullRequest
0 голосов
/ 16 января 2020

Я бы хотел простой фильтр поверх моих данных. Что должно быть достигнуто следующим образом:

##### server:    
output$table <- DT::renderDT(data, filter="top")
##### ui:
DT::DTOutput('table')

или

##### server: 
output$table <- DT::renderDataTable(data, filter="top")
##### ui:
DT::dataTableOutput('table')

Однако у меня также есть столбец с изображениями, встроенными в таблицу данных. Эти изображения оказываются текстом в вышеуказанных функциях. Изображения отображаются в следующих функциях, но затем фильтр исчезает:

##### server:
output$table <- DT::renderDataTable(
DT::datatable(data, escape=FALSE)
, filter="top")
##### ui:
DT::dataTableOutput('table')

Как разрешить использование изображений и фильтров в моем пользовательском интерфейсе?

Бонус: изначально я использовал форматируемый со многими другие функции для оформления текста моей таблицы. Я где-то читал, что formattable и фильтры до сих пор не работают вместе и, следовательно, исключили красоту (цветной текст) для функциональности (filter). Formattable позволяет отображать изображения тоже. Следовательно, если у кого-то есть метод, позволяющий форматировать его с помощью фильтра, это тоже решит проблему!

1 Ответ

0 голосов
/ 16 января 2020

Предположим, у вас есть два изображения pic1.png и pic2.png в подпапке www. Тогда вы можете сделать:

library(shiny)
library(DT)

dat <- data.frame(
  X = c(1, 2),
  Y = c("pic1", "pic2")
)

render <- c(
  "function(data, type, row){",
  "  if(type === 'display'){",
  "    var tag = '<img src=\"' + data + '.png\" width=\"100\"/>';",
  "    return tag;",
  "  } else {",
  "    return data;",
  "  }",
  "}"
)

ui <- fluidPage(
  br(),
  DTOutput("dtable")
)

server <- function(input, output, session){

  output[["dtable"]] <- renderDT({
    datatable(
      dat,
      rownames = FALSE,
      filter = "top",
      options = list(
        columnDefs = list(
          list(targets = "_all", className = "dt-center"),
          list(targets = 1, render = JS(render)) # 1 is the index of the column of images
        )
      )
    )
  })

}

shinyApp(ui, server)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...