Search code examples
htmlrflexdashboard

Icons do not show up at all in R flexdashboard


Im creating a flexdashboard which displays a table. In the last column icons are included but they are not displayed at all because of flexdashboard. That works normally in shinydashboard. Any workaround?

---
title: "Single Column (Fill)"
output: 
  flexdashboard::flex_dashboard:
    vertical_layout: fill
---

```{r global, include=FALSE}
library(shiny)
library(shinydashboard)
FCB<-c(5,6,4,6,8)
TWI<-c(3,5,2,3,5)
IN<-c(2,1,1,1,1)
DF1<-data.frame(FCB,TWI,IN)

FCB<-c(0,0,1,2,4)
TWI<-c(1,2,3,4,5)
IN<-c(1,3,4,5,6)
DF2<-data.frame(FCB,TWI,IN)

DF1$direction <- ifelse(
  DF1$FCB < DF2$FCB,
  as.character(icon("angle-up")),
  as.character(icon("angle-down"))
)
```

### Chart 1

```{r}
renderTable(DF1, sanitize.text.function = function(x) x)
```

Solution

  • You are using Shiny content rendered to a static file. I added runtime: shiny to the YAML header.

    If you just need arrows would using simpe UTF-8 arrows like these be okay?

    If you want to render HTML in a table in flexdashboard you should use a datatable from the DT package. Note that the rendering of the HTML is escaped by default. To render the HTML in your table you have to set escape = FALSE.

    Here is an option:

    ---
    title: "Single Column (Fill)"
    output: 
      flexdashboard::flex_dashboard:
        vertical_layout: fill
      runtime: shiny
    ---
    
    ```{r global, include=FALSE}
    library(DT)
    library(shiny)
    library(shinydashboard)
    FCB<-c(5,6,4,6,8)
    TWI<-c(3,5,2,3,5)
    IN<-c(2,1,1,1,1)
    DF1<-data.frame(FCB,TWI,IN)
    
    FCB<-c(0,0,1,2,4)
    TWI<-c(1,2,3,4,5)
    IN<-c(1,3,4,5,6)
    DF2<-data.frame(FCB,TWI,IN)
    
    DF1$direction <- ifelse(
      DF1$FCB < DF2$FCB,
      "<p>&uarr;</p>",
      "<p>&darr;</p>"
      )
    
    DF1.table <- datatable(DF1, escape = FALSE)
    ```
    
    ### Chart 1
    
    ```{r}
    DT::renderDataTable(DF1.table)
    ```