R-DT::renderDataTable列宽

R-DT::renderDataTable列宽,r,shiny,R,Shiny,我正在用shiny制作一个应用程序,遇到了一个小问题,但令人恼火。我生成的部分输出是使用DT::renderDataTable输出的。只有两列,第一列的宽度将取决于输入数据集,因此我不想绝对固定任何宽度。我已经看到了线程,其中一个答案中的代码在某种程度上起作用。但是,如果我第二次按下actionButton,表将调整自身大小以填充整个输出窗口的宽度 是否有办法防止再次按下操作按钮后表格自行调整大小?我知道只使用renderTable和tableOutput就可以解决问题,但我喜欢dataTabl

我正在用shiny制作一个应用程序,遇到了一个小问题,但令人恼火。我生成的部分输出是使用
DT::renderDataTable
输出的。只有两列,第一列的宽度将取决于输入数据集,因此我不想绝对固定任何宽度。我已经看到了线程,其中一个答案中的代码在某种程度上起作用。但是,如果我第二次按下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) )
库(“闪亮”)
图书馆(“DT”)

mwe_ui您可以在ui函数中添加
width
参数,而不是在服务器的
columnDefs

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" , width="125px")
    )
  )))

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)
  ) 
}

runApp( list(ui=mwe_ui, server=mwe_server) )
库(“闪亮”)
图书馆(“DT”)

mwe_ui我看到您已将宽度预先固定为
125px
,为什么不将其固定在桌子上?据我了解,
125px
的宽度不是绝对固定宽度,只是“首选”宽度。在我制作的实际应用程序中,我使用了列宽度的精确规格,第一列可以比第二列宽很多。我对示例进行了编辑,使其具有不同长度的字符串,以说明我的意思。指定表格宽度是定义绝对宽度,还是扩展到表格内容?