2014-12-19 18 views
5

Tôi muốn có DataTable (với tất cả các tính năng xếp hạng, tìm kiếm và trang) không căng đầy trên trang và kết quả là một lượng lớn khoảng trắng trong mỗi cột ...Chiều rộng cột trong renderDataTable của ứng dụng sáng bóng mà không cần kéo dài

enter image description here

... lý tưởng với cột độ rộng tương tự như "quấn" phong cách từ renderTable ...

enter image description here

tôi kn Tôi có thể sửa chữa độ rộng cột tương đối, tuy nhiên, bảng của tôi sẽ tự động cập nhật với số cột khác nhau tùy thuộc vào đầu vào được chọn. Tôi muốn thêm cột để mở rộng vào không gian trống ở phía bên tay phải và sau đó kích hoạt một thanh cuộn ngang nếu nó trở nên rộng hơn chiều rộng cửa sổ trình duyệt.

dụ tái sản xuất của các bảng trong những hình ảnh trên ...

library(shiny) 
runApp(list(
    ui = navbarPage(
    title = 'Tables', 
    tabPanel('dataTableOutput', dataTableOutput('ex1')), 
    tabPanel('tableOutput', tableOutput('ex2')) 
), 
server = function(input, output) { 
    output$ex1 <- renderDataTable(iris) 
    output$ex2 <- renderTable(iris) 
} 
)) 
+0

Tôi biết nó không trực tiếp giải quyết câu hỏi của bạn, nhưng RStudio vừa công bố htmlwidgets cho R bao gồm những thứ thú vị khác, DataTables. http://www.htmlwidgets.org/showcase_datatables.html – Khashaa

Trả lời

6

Tôi nghĩ rằng bạn nên sử dụng drawCallback trong DataTables. Ở đây tôi chỉ thay đổi ví dụ của bạn một chút để sửa chiều rộng của dataTable thành 600px. bạn có thể chơi với chức năng java script có thể có trong chức năng gọi lại để làm hầu hết mọi thứ.

library(shiny) 
runApp(list(
    ui = navbarPage(
    title = 'Tables', 
    tabPanel('dataTableOutput', dataTableOutput('ex1')), 
    tabPanel('tableOutput', tableOutput('ex2')) 
), 
    server = function(input, output) { 
    output$ex1 <- renderDataTable(iris, 
            option = list(drawCallback = I("function(settings) {document.getElementById('ex1').style.width = '600px';}"))) 
    output$ex2 <- renderTable(iris) 
    } 
)) 
0

Giả sử bạn data.framedf, sau đó đặt mã này vào lúc bắt đầu của khối phản ứng/renderTable ở phía máy chủ. Nó sẽ quấn các tên cột theo chiều dài mong muốn và do đó giảm kích thước của bảng. Bạn luôn có thể thay đổi chiều rộng bằng với chiều rộng mong muốn.

library(stringr) 

colnames(df) = str_wrap(colnames(df),width = 10) 
Các vấn đề liên quan