R shiny color dataframe

后端 未结 2 1873
独厮守ぢ
独厮守ぢ 2020-12-15 09:14

I have a data frame:

   runApp(
      list(ui = bootstrapPage(pageWithSidebar(
        headerPanel(\"Data frame with colors\"),
        sidebarPanel(),
              


        
相关标签:
2条回答
  • 2020-12-15 09:27

    Here is a solution. To use it, you have to define css in a vector:

    css <- c("#bgred {background-color: #FF0000;}",
              "#bgblue {background-color: #0000FF;}")
    

    and write #... inside the cell :

    > data.frame(x=c("A","B"), y=c("red cell #bgred", "blue cell #bgblue"))
      x                 y
    1 A   red cell #bgred
    2 B blue cell #bgblue
    

    Then use my colortable() function mainly inspired from the highlightHTML package and from my personal shiny experience. Here is an example:

    library(pander)
    library(markdown)
    library(stringr)
    library(shiny)
    
    # function derived from the highlightHTMLcells() function of the highlightHTML package
    colortable <- function(htmltab, css, style="table-condensed table-bordered"){
      tmp <- str_split(htmltab, "\n")[[1]] 
      CSSid <- gsub("\\{.+", "", css)
      CSSid <- gsub("^[\\s+]|\\s+$", "", CSSid)
      CSSidPaste <- gsub("#", "", CSSid)
      CSSid2 <- paste(" ", CSSid, sep = "")
      ids <- paste0("<td id='", CSSidPaste, "'")
      for (i in 1:length(CSSid)) {
        locations <- grep(CSSid[i], tmp)
        tmp[locations] <- gsub("<td", ids[i], tmp[locations])
        tmp[locations] <- gsub(CSSid2[i], "", tmp[locations], 
                               fixed = TRUE)
      }
      htmltab <- paste(tmp, collapse="\n")
      Encoding(htmltab) <- "UTF-8"
      list(
        tags$style(type="text/css", paste(css, collapse="\n")),
        tags$script(sprintf( 
                      '$( "table" ).addClass( "table %s" );', style
                    )),
        HTML(htmltab)
      )
    }
    
    ##
    runApp(
      list(
        ui=pageWithSidebar(
          headerPanel(""),
          sidebarPanel(
          ),
          mainPanel(
            uiOutput("htmltable")
          )
        ),
        server=function(input,output,session){
          output$htmltable <- renderUI({
            # define CSS tags
            css <- c("#bgred {background-color: #FF0000;}",
                     "#bgblue {background-color: #0000FF;}")
            # example data frame 
            # add the tag inside the cells
            tab <- data.frame(x=c("A","B"), y=c("red cell #bgred", "blue cell #bgblue"))
            # generate html table with pander package and markdown package
            htmltab <- markdownToHTML(
              text=pandoc.table.return(
                tab, 
                style="rmarkdown", split.tables=Inf
              ), 
              fragment.only=TRUE
            ) 
            colortable(htmltab, css)
          })
        })
    )
    

    enter image description here

    0 讨论(0)
  • 2020-12-15 09:37

    Nowadays there is more elegant solution by using shinyTables:

    # Install devtools, if you haven't already.
    install.packages("devtools")
    
    library(devtools)
    install_github("shinyTable", "trestletech")
    library(shiny)
    runApp(system.file("examples/01-simple", package="shinyTable"))
    

    Code in github:Example:

    0 讨论(0)
提交回复
热议问题