【发布时间】:2016-01-02 12:33:39
【问题描述】:
我正在制作一个闪亮的应用程序,但遇到了一个小但令人恼火的问题。我产生的部分输出是使用DT::renderDataTable 输出的。只有两列,第一列的宽度将取决于输入数据集,所以我不想绝对将宽度固定为任何东西。我见过this 线程,其中一个答案中的代码在某种程度上有效。但是,如果我再次按下 actionButton,表格会自行调整大小以填充输出窗口的整个宽度。
有没有办法防止表格在再次按下操作按钮后自行调整大小?我知道只使用renderTable 和tableOutput 可以解决问题,但我喜欢dataTableOutput,并且更喜欢使用该功能。
对于 MWE:
library("shiny")
library("DT")
mwe_ui <- shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
titlePanel("Example"),
sliderInput(inputId = "df",
label = "Degrees of Freedom:",
min=1 , max=50 , value=1 , step=1
),
actionButton(inputId = "compute1",
label = "Sample"
)
),
mainPanel(
dataTableOutput( outputId = "summary" )
)
)))
mwe_server <- function(input, output) {
temp01 <- reactive({
compute1 <- input$compute1
if( compute1 > 0 ){
isolate({
aa <- round( runif(6, 4,20 ) )
bb <- character()
for( ii in 1:6 ){
bb[ii] <- paste0(sample(letters, size=aa[ii]), collapse="")
}
xx <- matrix( round(rt(6, df=input$df), 4), nrow=6, ncol=1 )
return( data.frame(xx) )
})
}
})
##############
output$summary <- DT::renderDataTable({
temp02 <- temp01()
}, rownames=FALSE,
options = list(autoWidth = TRUE,
columnDefs = list(list(width = "125px", targets = "_all"))
)
)
}
runApp( list(ui=mwe_ui, server=mwe_server) )
【问题讨论】:
-
我看到您将宽度预先固定为
125px,为什么不为表格修复它? -
据我了解,
125px的宽度不是绝对固定宽度,只是“首选”宽度。在我制作的实际应用程序中,我使用了那些精确的列宽规范,并且第一列能够比第二列宽得多。我已经编辑了示例以具有一些不同长度的字符串来说明我的意思。指定表格宽度是定义绝对宽度,还是会扩展到表格的内容? -
我不敢相信这没有直接的解决方案,比如 Rhandsontable 中的 manualcolumnresize