I'm having a strange issue with one of my applications using DT. I'm trying to render a table with renderDataTable with all column names have mouse over text. Here is the code:
server.R
.libPaths("/usr/lib64/R/library")
library(shiny) # 0.12.1
library(data.table) # 1.9.4
library(DT) # 0.1
options(DT.options = list(pageLength = 5,lengthMenu = c(5,10, 25, 100),orderClasses=TRUE))
rb <- fread("r1.csv")
## r1.csv has the following data(subset) :
# "c1","c2","c3","c4"
# "10011","7","999999","3"
# "10597","6","114182","1"
# "20101","7","999999","3"
# "20102","7","999999","3"
non_factor_columns<-names(rb)[!names(rb) %in% c("c1","c3")]
rb[,(non_factor_columns):=lapply(.SD, as.factor),.SDcols=non_factor_columns]
cols<-c("c1","c2","c3","c4")
labels<-c("This is column 1","This is column 2","This is column 3","This is column 4")
rbcollabels<-data.table(cols,labels)
setkey(rbcollabels,cols)
prefcols<-c("c1","c3")
setcolorder(rb,union(prefcols,colnames(rb)[!colnames(rb) %in% prefcols]))
r<-as.data.table(colnames(rb))
gotlabels<-rbcollabels[r]
collabelstr<- paste0("thead(tr(",paste0("th('",gotlabels$cols,"'",",title=","'",gotlabels$labels,"')",collapse=","),"))")
shinyServer(function(input, output) {
sketch = htmltools::withTags(table(
class = 'display',eval(parse(text=collabelstr))
)
)
output$table1 <- renderDataTable({
datatable(rb, options=list(dom='C<"clear">Rlrtip',colVis = list(activate = 'mouseover', restore = 'Restore', showAll= 'Show all', showNone= "Show none" )),
rownames=F,container=sketch,filter='top',extensions = c('ColVis','ColReorder')
)
})
})
ui.R
.libPaths("/usr/lib64/R/library")
library(shiny)
shinyUI(fluidPage(
tags$head( tags$style("#table1 {color: blue; }")),
tags$head( tags$style("#table1 th {background-color: yellow; }")),
tags$head( tags$style("#table1 td,th {border: thin solid gray; }")),
tags$head( tags$style("#table1 tr {background-color: Gainsboro; }")),
tags$head( tags$style("#table1 tr:nth-child(odd) {background-color: Lavender; }")),
tags$head( tags$style("#table1 th:hover {color: red; }")),
title = "Test Data",
h3("Test Data ",align="center",style="color:red"),
mainPanel( dataTableOutput("table1") )
))
In a new R studio session, the code doesn't render the table in the first attempt, but will render it in the 2nd attempt without any modifications to the code. From the published location, the table doesn't render at all despite multiple attempts. I cannot figure out why - any help?
I figured that
library(DT)
is missing in ui.R and after I added that right afterlibrary(shiny)
it worked fine. The reason that it worked inRstudio
in the 2nd try was because by thenDT
was loaded fromserver.R
but was not in the first try because of lack of this statement inui.R
, I guess.Try using the
DT::renderDataTable()
andDT::dataTableOutput()
versions.I think the shiny versions are deprecated...