在Shiny / R中,我想独立更新表格主体和表格标题。考虑这个例子:
library( shiny )
tt <- read.table( text=" id blah foo
1 1 adsf foo1
2 2 ioiu foo2
3 3 ioiuoiuer foo3", stringsAsFactors= F )
runApp( list(
ui= basicPage(
tags$table(
uiOutput( "myheader" ),
uiOutput( "mybody" )
)
),
server= function( input, output ) {
output$myheader <- renderUI({
tags$thead(
tags$tr( lapply( colnames( tt ), function( x ) tags$th( x ) ) )
)
})
output$mybody <- renderUI({
rows <- list()
for( i in 1:nrow( tt ) ) {
rows[[i]] <- tags$tr( lapply( tt[i,], function( x ) tags$td( x ) ) )
}
tags$tbody( rows )
})
} ) )
在 theory 中,我将分别创建表的body和header元素。但是,闪亮渲染页面的方式,两个元素最终都在表格的外面:
是否有可能(如果是,那么如何)在Shiny中分别更新表格标题和正文?
简短解释为什么我没有使用默认的xtable或dataTable:我在R中有一个非常大的数据帧,所以我不想使用dataTable。过滤,搜索,排序和分页都应该在服务器端完成。但是,由于我想拥有所有这些好玩的噱头,我需要重新实现数据帧到HTML表的转换。我遇到了表头中单选按钮的问题 - 当表重新显示时,按钮被重置并触发另一个事件。最简单的解决方案(也更优雅)是将表体与桌头分开渲染。
答案 0 :(得分:2)
我不确定为什么会在您的代码中发生这种情况。但是,下面的代码块会按预期生成一个表。这适用于您的应用程序吗?
myheader <- reactive({
tags$thead(
tags$tr( lapply( colnames( tt ), function( x ) tags$th( x ) ) )
)
})
mybody <- reactive({
rows <- list()
for( i in 1:nrow( tt ) ) {
rows[[i]] <- tags$tr( lapply( tt[i,], function( x ) tags$td( x ) ) )
}
tags$tbody( rows )
})
output$mytable <- renderUI({
tags$table(
myheader(),
mybody()
)
})