Иконки в таблице данных в Shiny - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь добавить столбец значков в таблицу данных, которая отображается в приложении Shiny.По сути, я просто хочу стрелку вверх, когда данные пошли вверх, и стрелку вниз, когда они пошли вниз.Однако я не уверен, как отобразить значок.Когда я добавляю столбец, используя, например, icon("arrow-up"), я получаю следующую ошибку:

Ошибка: метод по умолчанию не реализован для типа «список»

Я могуобратите внимание, что если я попробую этот подход за пределами Shiny, он отображает данные о значке, а не значок.

Одним из вариантов может быть использование подхода добавления его в качестве изображения - но кажется, что будет более прямой путь?Я также не уверен, как это сделать с помощью иконок Font Awesome.

Извиняюсь, если это основное - я не смог найти ответ!

Вот упрощенная версия того, что я делаю:

library(shiny)
library(shinydashboard)

number_compare <- data.frame(replicate(2, sample(1:100, 10, rep=TRUE)))
number_compare$direction <- ifelse(number_compare$X1 < number_compare$X2, "Up", "Down")
number_compare$direction <- ifelse(number_compare$X1 == number_compare$X2, "", number_compare$direction)


sidebar <- dashboardSidebar()

body <- dashboardBody(
  fluidRow(box(width = 12, solidHeader = TRUE,
               tableOutput("example_table"))
           )
  )

ui <- dashboardPage(dashboardHeader(title = "Example"),
                    sidebar,
                    body
)


server <- function(input, output) {
  output$example_table <- renderTable(number_compare)
}

shinyApp(ui, server)

1 Ответ

0 голосов
/ 24 декабря 2018

Вы не говорите, какие значки вы хотите использовать, поэтому я приму angle-up и angle-down от fontawesome, но вы также можете использовать глифы.

Как вы заметили, выводicon() это список.Назначение этого в вашем ifelse даст столбец, повторяющий значения i, iconname и NULL.

Вместо этого попробуйте обернуть icon() в as.character(), чтобы получить необработанный HTML для значка,Например:

number_compare$direction <- ifelse(
    number_compare$X1 < number_compare$X2,
    as.character(icon("angle-up")),
    as.character(icon("angle-down"))
)

Это заполнит столбец такими значениями, как <i class="fa fa-angle-up"></i>, которые вы можете распечатать в приложении в виде необработанного HTML.

В качестве альтернативы вы можете использовать escape-коды HTML для печатистрелки без использования значков.См. https://www.w3schools.com/charsets/ref_utf_arrows.asp для списка escape-кодов HTML.

Редактировать: Всякий раз, когда вы добавляете необработанный HTML в таблицу, убедитесь, что блестящий не скрывается от него.Замените ваш звонок на renderTable(number_compare) на renderTable(number_compare, sanitize.text.function = function(x) x) (на основе r блестящий стол не отображает html )

...