0

I just imported a csv data into R's flexdashboard and shiny and wanted to display the table inside one of the Chart grid and below is the code that I am using for that. I wanted vertical and horizontal scrollers to appear but it seems these are not working, any idea where I am wrong?

for data, you can use MTCARS for time-being.

Row 
-------------------------------------

### DATA 

```{r}

    data_set <- reactive({
    inFile <- input$file1
    if (is.null(inFile))
      return(NULL) else return ( read.csv(inFile$datapath, header = input$header, stringsAsFactors =FALSE) )
}) 

output$tbl <-DT::renderDataTable({
  if (is.null(data_set()))
      return(NULL) else return (
        DT::datatable(data_set(), 
                      #style='bootstrap', class='table-condensed', 
                      #editable=FALSE, 
                      rownames=FALSE,
        options = list(
         scrollX = '400px', scrollY='360px', 
         searchHighlight=TRUE, pageLength = 4
  ))
)

})

div(style = "overflow-x: scroll; overflow-y: scroll;", DTOutput("tbl"))
```

Adding data:

structure(list(Gender = c("Male", "Male", "Male", "Male", "Male", 
"Male", "Male", "Male", "Male", "Male"), Height = c(73.847017017515, 
68.7819040458903, 74.1101053917849, 71.7309784033377, 69.8817958611153, 
67.2530156878065, 68.7850812516616, 68.3485155115879, 67.018949662883, 
63.4564939783664), Weight = c(241.893563180437, 162.3104725213, 
212.7408555565, 220.042470303077, 206.349800623871, 152.212155757083, 
183.927888604031, 167.971110489509, 175.92944039571, 156.399676387112
), BMI = c(0.0443566151469252, 0.0343082174614673, 0.0387343292394288, 
0.0427654457094595, 0.0422547891767963, 0.033653156898047, 0.0388739862001733, 
0.0359564180086832, 0.039169072415755, 0.0388404008602306), probability = c(5.77831234737499e-06, 
0.605952546493327, 2.62595199514618e-05, 0.000362873417265588, 
0.00461190097404834, 0.911068673692331, 0.0496119303175197, 0.352335117615303, 
0.139124546478089, 0.343426515632885)), row.names = c(NA, 10L
), class = "data.frame")
LeMarque
  • 733
  • 5
  • 21

2 Answers2

1

Although I can't test this in your particular example since it is not minimally reproducible, I can share this code that works in one of my current production flexdashboards that is a datatable created within renderDT instead of renderDataTable to avoid naming conflicts. In this example, data_set() is reactive.

The scrolling is controlled by the scrollX and scrollY options:

renderDT({
  datatable(data_set(), style='bootstrap', 
    class='table-condensed', editable=FALSE, rownames=FALSE,
    options = list(
         scrollX = '400px', scrollY='360px', 
         searchHighlight=TRUE, order=list(0, 'asc'),
  ))
})
mysteRious
  • 4,102
  • 2
  • 16
  • 36
  • thanks for helping me out. I modified your code and update my question. but can you please provide explanation to `'options'` in your code? – LeMarque Nov 11 '18 at 04:34
1

Here is a sample of my code with renderDataTable and scrollY working. I am using a reactive df that is updated out of this section.

renderDataTable({
  # Table only updates after the df as it is wrapped in an 
  # eventReactive
  if (!(is.null(query_data$$df))) {
    query_data$df %>% 
      select(JobID, PartID, `Short Desc`)
  }
},
options = list(
  scrollY = "43vh",
  dom = "ft",
  fixedColumns = TRUE,
  autoWidth = TRUE,
  ordering = TRUE,
  pageLength = -1)
)

The key part is getting the right options, the dom option allows you to set quite a few parameters dom = "ft" enables the filter and places it above the table.

pageLength = -1 displays all the data in the df.

You should check out https://datatables.net/ for more info

lifedroid
  • 164
  • 2
  • 7