我有一个可以生成数据表的Shiny应用程序,但是我无法冻结第一列和标题,因此当您向下或向下时,表格难以阅读。反正有没有冻结窗格?我尝试过搜索,却一无所获。
答案 0 :(得分:15)
有趣的问题,现在感谢最近对Shiny的更新data.tables 1.10.2
使用各种插件和扩展程序更加容易。对于您的问题,FixedHeader扩展名似乎是理想的。要添加此扩展程序,我们需要包含相关的JavaScript
和CSS
文件(请参阅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并且在某些方面但是标题和第一列(我们添加的索引列)仍然可见。
答案 1 :(得分:6)
FixedHeader不起作用,在x滚动时给出错误的列名, 但是FixedColumns可以工作。这是由于它们之间的incompatibility
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))
)
)
}
)
)