-->

R shiny DT strange rendering issue

2019-08-08 20:53发布

问题:

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?

回答1:

I figured that library(DT) is missing in ui.R and after I added that right after library(shiny) it worked fine. The reason that it worked in Rstudio in the 2nd try was because by then DT was loaded from server.R but was not in the first try because of lack of this statement in ui.R, I guess.



回答2:

Try using the DT::renderDataTable() and DT::dataTableOutput() versions.

I think the shiny versions are deprecated...



标签: r shiny dt