Question:
In theshiny
app below I display 3 tables in the same row.How can I set any table to be displayed as whole without having to use scrollX
regardless of the screen resolution of any machine?Basically Im looking for a way to set its columns’ width or its total width.library(shiny)
library(DT)
library(dplyr)
dat<-structure(list(Population = c("p1", "p1", "p1", "p1", "p1", "p1",
"p1", "p1", "p1", "p1", "p2", "p2", "p2", "p2", "p2", "p2"),
var1 = c("p1_1_a", "p1_1_b", "p1_2_a", "p1_2_b", "p1_3_a",
"p1_3_b", "p1_4_a", "p1_4_b", "p1_5_a", "p1_5_b", "p2_a",
"p2_b", "p2_c", "p2_d", "p2_e", "p2_f"),
Population2 = c("p1", "p1", "p1", "p1", "p1", "p1",
"p1", "p1", "p1", "p1", "p2", "p2", "p2", "p2", "p2", "p2"),
var12 = c("p1_1_a", "p1_1_b", "p1_2_a", "p1_2_b", "p1_3_a",
"p1_3_b", "p1_4_a", "p1_4_b", "p1_5_a", "p1_5_b", "p2_a",
"p2_b", "p2_c", "p2_d", "p2_e", "p2_f"),U = c(1, 1, 0, 0,
1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0), D = c(25, 12, 14, 11,
3, 3, 2, 4, 5, 0, 0, 0, 0, 25, 12, 14),
Udad = c(1, 1, 0, 0,
1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0), Ddshgg = c(25, 12, 14, 11,
3, 3, 2, 4, 5, 0, 0, 0, 0, 25, 12, 14)), row.names = c(NA,
-16L), class = c("tbl_df", "tbl", "data.frame"))
ui <- fluidPage(
fluidRow(
column(4,
DTOutput("table")),
column(4,
DTOutput("table2")
),
column(4,
DTOutput("table3"))
)
)
server <- function(input, output){
output[["table"]] <- renderDT({
dtable <- datatable(dat, rownames = FALSE,
options = list(
scrollX = TRUE,
order = list(list(1, 'asc')),
pageLength=16#ascending order
))
dtable
})
output[["table2"]] <- renderDT({
dtable <- datatable(dat, rownames = FALSE,
options = list(
scrollX = TRUE,
order = list(list(1, 'asc')),
pageLength=16#ascending order
))
dtable
})
output[["table3"]] <- renderDT({
dat$Comparison1<-NA
dat$cOMPARISON2<-NA
dtable <- datatable(dat, rownames = FALSE,
options = list(
scrollX = TRUE,
order = list(list(1, 'asc')),
pageLength=16#ascending order
))
dtable
})
}
shinyApp(ui, server)
[/code]
Answer:
You could usesplitLayout
instead of column
:library(shiny)
library(DT)
library(dplyr)
dat <- structure(list(Population = c("p1", "p1", "p1", "p1", "p1", "p1", "p1", "p1", "p1", "p1", "p2", "p2", "p2", "p2", "p2", "p2"), var1 = c("p1_1_a", "p1_1_b", "p1_2_a", "p1_2_b", "p1_3_a", "p1_3_b", "p1_4_a", "p1_4_b", "p1_5_a", "p1_5_b", "p2_a", "p2_b", "p2_c", "p2_d", "p2_e", "p2_f"), Population2 = c("p1", "p1", "p1", "p1", "p1", "p1", "p1", "p1", "p1", "p1", "p2", "p2", "p2", "p2", "p2", "p2"), var12 = c("p1_1_a", "p1_1_b", "p1_2_a", "p1_2_b", "p1_3_a", "p1_3_b", "p1_4_a", "p1_4_b", "p1_5_a", "p1_5_b", "p2_a", "p2_b", "p2_c", "p2_d", "p2_e", "p2_f"),U = c(1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0), D = c(25, 12, 14, 11, 3, 3, 2, 4, 5, 0, 0, 0, 0, 25, 12, 14), Udad = c(1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0), Ddshgg = c(25, 12, 14, 11, 3, 3, 2, 4, 5, 0, 0, 0, 0, 25, 12, 14)), row.names = c(NA, -16L), class = c("tbl_df", "tbl", "data.frame")) ui <- fluidPage(fluidRow( splitLayout( style = "margin-right: 0px;", DTOutput("table", width = "100%"), DTOutput("table2", width = "100%"), DTOutput("table3", width = "100%"), cellWidths = c("630px", "630px", "900px"), cellArgs = list(style = "margin-right: 15px;") ) )) server <- function(input, output) { output[["table"]] <- renderDT({ dtable <- datatable( dat, rownames = FALSE, options = list( scrollX = FALSE, order = list(list(1, 'asc')), pageLength = 16 # ascending order ) ) dtable }) output[["table2"]] <- renderDT({ dtable <- datatable( dat, rownames = FALSE, options = list( scrollX = FALSE, order = list(list(1, 'asc')), pageLength = 16 # ascending order ) ) dtable }) output[["table3"]] <- renderDT({ dat$Comparison1 <- NA dat$cOMPARISON2 <- NA dtable <- datatable( dat, rownames = FALSE, options = list( scrollX = FALSE, order = list(list(1, 'asc')), pageLength = 16 # ascending order ) ) dtable }) } shinyApp(ui, server) [/code]
If you have better answer, please add a comment about this, thank you!