我正在尝试将一列图标添加到Shiny应用程序中显示的数据表中。本质上,我只想在数据上升时使用向上箭头,而在数据下降时使用向下箭头。但是,我不确定如何显示图标。当我添加一列仅用于例如icon("arrow-up")
,出现以下错误:
错误:类型'list'未实现默认方法
我可以看到,如果我在Shiny之外尝试这种方法,它会显示有关图标的数据,而不是显示图标。
一个选择可能是使用将其添加为图像的方法-但是感觉会有更直接的方法吗?我也不确定如何使用“真棒字体”图标来做到这一点。
很抱歉,如果这很简单-我找不到答案!
这是我正在做的事情的简化版本:
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)
答案 0 :(得分:3)
您没有说要使用什么图标,所以我假设angle-up
和angle-down
来自fontawesome,但您也可以使用字形图标。
如您所指出的,icon()
的输出是一个列表。在您的ifelse
中进行分配将使一列重复值i
,图标名和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。
或者,您可以使用HTML转义码来打印箭头,而无需使用图标。有关HTML转义代码的列表,请参见https://www.w3schools.com/charsets/ref_utf_arrows.asp。
编辑::每当在表中包含原始HTML时,请确保闪亮不会逸出它。将您对renderTable(number_compare)
的呼叫替换为renderTable(number_compare, sanitize.text.function = function(x) x)
(基于r shiny table not rendering html)