闪亮的数据表列宽(按名称)

问题描述 投票:0回答:1

我在 Shiny 应用程序中有一个数据表,并且允许用户选择列。我想控制列的宽度,但该列的索引会根据用户的选择而变化,因此我想根据列名称控制宽度。

在下面的可重现示例中(这只是我想要做的示例),我想控制列“c”的宽度。起初我知道索引,所以这很好,但是当用户添加新列(“b”)时,列宽度格式将应用于第二列(索引= 1)。

请注意,DataTables 的文档表明可以使用

target=c("c")
,但此 link 似乎表明该功能不起作用。

library(shiny)
ui <- shinyUI(
  
  tagList(
    
    navbarPage(title = HTML('<span class="navtitle">Test</span>'),
               id= "myid", 
               inverse=TRUE, 
               collapsible = TRUE,
               tabPanel("Home", 
                        selectInput('myselect', label="", choices=c("a", "b", "c"),
                                    selected = c("a", "c"), multiple=TRUE),
                        dataTableOutput(outputId="dataTable")
               )
    ) 
  )  
)

server <- function(input, output, session){ 
  
  output$dataTable <- renderDataTable({
    dat <- data.frame(a=1:10, b=1:10, c=1:10)
    dat[, names(dat)%in%input$myselect]
    
    
  }, 
  
  options = list(pageLength = 100, dom='frtp', 
                 scrollX = TRUE, 
                 columnDefs = list(list(width = '30px', targets = c(1))))
  )
  
}

shinyApp(ui=ui, server=server)
r shiny dt
1个回答
1
投票

感谢@Yihui 在这篇文章

的回答

可以使用选项中的功能,非常有用

library(shiny)
ui <- shinyUI(

  tagList(

    navbarPage(title = HTML('<span class="navtitle">Test</span>'),
               id= "myid", 
               inverse=TRUE, 
               collapsible = TRUE,
               tabPanel("Home", 
                        selectInput('myselect', label="", choices=c("a", "b", "c"),
                                    selected = c("a", "c"), multiple=TRUE),
                        dataTableOutput(outputId="dataTable")
               )
    ) 
  )  
)

server <- function(input, output, session){ 

  output$dataTable <- renderDataTable({
    dat <- data.frame(a=1:10, b=1:10, c=1:10)
    dat[, names(dat)%in%input$myselect]


  }, 

  options = function(){
    indx <- c(which("b"%in%input$myselect))
    if(length(indx)==0) index <- ''

    list(
      pageLength = 100, 
      dom='frtp',
      scollX = TRUE,
      columnDefs = list(list(width = '30px', targets = indx))
    )
  }
  )

}

shinyApp(ui=ui, server=server)
© www.soinside.com 2019 - 2024. All rights reserved.