2014-10-07 28 views
11

我有一個可以生成數據表的Shiny應用程序,但是我無法凍結第一列和標題,因此表格很難閱讀,跨越。無論如何要凍結窗格?我嘗試過搜索,但沒有發現任何東西。在Shiny中使用data.table凍結標題和第一列

+0

之間incompatibility繼最近閃亮更新,你可以嘗試在這裏,看看排序選項可供選擇https://datatables.net/upgrade/1.10-convert – 2014-10-07 07:24:01

回答

12

有趣的問題,現在感謝最近更新的閃亮data.tables 1.10.2 它是很容易使用各種插件和擴展。對於你的問題FixedHeader擴展似乎是理想的。要添加此擴展,我們需要包括相關JavaScriptCSS文件(見http://cdn.datatables.net/):

tagList(
    singleton(tags$head(tags$script(src='//cdn.datatables.net/fixedheader/2.1.2/js/dataTables.fixedHeader.min.js',type='text/javascript'))), 
    singleton(tags$head(tags$link(href='//cdn.datatables.net/fixedheader/2.1.2/css/dataTables.fixedHeader.css',rel='stylesheet',type='text/css'))) 
) 

data.tables有一個選項initComplete這使我們能夠一次表繪製等規定回調

function(settings, json) { 
    new $.fn.dataTable.FixedHeader(this, { 
              left: true, 
              right: true 
              }); 
             } 

我們將使用iris數據集的修改版本,在末尾添加索引和一些隨機數據以顯示從左到右的滾動:

library(shiny) 
myData <- cbind(list(index = row.names(iris)), iris 
       , rep(list(row.names(iris)), 10)) 
names(myData)[7:16] <- paste0("randomData", 1:10) 
runApp(
    list(ui = fluidPage(
    tagList(
     singleton(tags$head(tags$script(src='//cdn.datatables.net/fixedheader/2.1.2/js/dataTables.fixedHeader.min.js',type='text/javascript'))), 
     singleton(tags$head(tags$link(href='//cdn.datatables.net/fixedheader/2.1.2/css/dataTables.fixedHeader.css',rel='stylesheet',type='text/css'))) 
    ), 

    dataTableOutput("mytable") 
) 
    , server = function(input, output, session){ 
    output$mytable <- renderDataTable(myData, 
             options = list(
             pageLength = 50, 
             initComplete = I("function(settings, json){ 
              new $.fn.dataTable.FixedHeader(this, { 
              left: true, 
              right: true 
              }); 
             }") 
            ) 
    ) 
    }) 
) 

所以在圖片中,我們可以看到我們正在向下滾動到記錄8,並且在某些方面,但標題和第一列(我們添加的索引列)仍然可見。

enter image description here

+1

快樂幫,如果答案解決了你的問題可以考慮通過勾選它來接受它。 – jdharrison 2014-10-07 15:52:17

+1

非常感謝您的幫助!有沒有辦法可以凍結第一列的標題,所以當我向右滾動時可見? – Kamal 2014-10-07 15:56:32

+2

遵循'dataTables'文檔和您非常詳細的答案,我嘗試了我的一個閃亮應用中的'FixedColumns'插件。我在我的頭文件中包含了'fixedcolumns/3.0.2' css和js文件以及'dataTables 1.10.4' css和js文件,並在我的選項中包含了'initComplete',並做了如下小改動:'function(settings, json){$ {$} .fn.dataTable.FixedColumns(this,{}); }'。但是,當我運行該應用程序時,表格一直顯示「processing ...」消息,並未按預期加載。我目前正在使用最新的閃亮發佈,0.11。思考? – 2015-01-31 17:29:42

3

FixedHeader不工作,給人然而X-滾動, 但FixedColumns作品錯列名。正是由於他們

library(shiny) 
library(DT) 
runApp(
    list(ui = fluidPage(

    dataTableOutput("mytable") 
) 
    , server = function(input, output, session){ 
    Rows <- c(1:50) 
    for (y in 1:15){ 
     x<-y-1 
     assign(letters[x+1],runif(5, 0, 1)) 
    } 
    x <- data.frame(Rows, mget(letters[1:15]), row.names=NULL) 
    x<- x[2:15] 
    output$mytable <- renderDataTable(
     DT::datatable(x, rownames=FALSE,extensions = c('FixedColumns',"FixedHeader"), 
        options = list(dom = 't', 
            scrollX = TRUE, 
            paging=FALSE, 
            fixedHeader=TRUE, 
            fixedColumns = list(leftColumns = 1, rightColumns = 0)) 
    ) 
    ) 
    } 
) 
)