Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
419 views
in Technique[技术] by (71.8m points)

r - Output a good-looking matrix using renderTable()

I am creating a matrix in my server. I would like to then output this matrix on the screen using renderTable(). (I create it in the server because its length (among others) depends on some other inputs in the ui).

As you will see with the code (or the attached picture) here below, the matrix that appears does not look good at all :it's a matrix with grey borders, rounded corners etc.

So the question: is there a way to control the appearance of the matrix ? For example, I may not want borders, I may want the rownames to be in Italics/bold etc...

shiny::runApp(
list(
ui = pageWithSidebar(

headerPanel("TEST"),

sidebarPanel(
helpText('This matrix is pretty ugly:')
),

mainPanel(    
uiOutput('matrix')     
)
)
, 
server = function(input,output){
output$matrix <- renderTable({

matrix <- matrix(rep(1,6),nrow=3)

rownames(matrix) <- c('a','b','c')
matrix

})
}
)
)

enter image description here

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Mathjax rendering:

library(xtable)

shiny::runApp(
  list(
    ui = pageWithSidebar(

      headerPanel("TEST"),

      sidebarPanel(
        helpText('Is this matrix cool ?')
      ),

      mainPanel(    
        uiOutput('matrix')     
      )
    )
    , 
    server = function(input,output){
      output$matrix <- renderUI({
        M <- matrix(rep(1,6),nrow=3)
        rownames(M) <- c('a','b','c')
        M <- print(xtable(M, align=rep("c", ncol(M)+1)), 
                          floating=FALSE, tabular.environment="array", comment=FALSE, print.results=FALSE)
        html <- paste0("$$", M, "$$")
        list(
          tags$script(src = 'https://c328740.ssl.cf1.rackcdn.com/mathjax/2.0-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML', type = 'text/javascript'),
          HTML(html)
        )
      })
    }
  )
)

enter image description here

Update July 2015

Something has changed and the MathJax rendering does not work anymore. Maybe this is the link to the MathJax library, I don't know. Anyway, there's a new function in Shiny, withMathJax, which does the job. Replace the server function by the following one:

server = function(input,output){
    output$matrix <- renderUI({
        M <- matrix(rep(1,6),nrow=3)
        rownames(M) <- c('a','b','c')
        M <- print(xtable(M, align=rep("c", ncol(M)+1)), 
                   floating=FALSE, tabular.environment="array", comment=FALSE, print.results=FALSE)
        html <- paste0("$$", M, "$$")
        list(
            withMathJax(HTML(html))
        )
    })
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...