Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现具有可调列的R表?_R_Shiny_Dt - Fatal编程技术网

如何实现具有可调列的R表?

如何实现具有可调列的R表?,r,shiny,dt,R,Shiny,Dt,我正在寻找一种方法,使表列能够处理不同未知大小的数据/文本 表的所需行为基本上类似于Excel单元格/列,即 默认情况下没有包装 对于长文本,仅在指定的列宽内显示尽可能多的匹配(在下面第1行的示例中,第2列显示“非常适合”) 可以通过拖动显示更多或更少文本的边框来调整列宽 以下示例可以处理1。) 库(闪亮) 图书馆(DT) shinyApp( ui尝试使用rhandsontable而不是Datatable。它有一些惊人的特性。其中之一就是手动调整列大小。 此文档将帮助您解决问题。尝试使用rhan

我正在寻找一种方法,使表列能够处理不同未知大小的数据/文本

表的所需行为基本上类似于Excel单元格/列,即

  • 默认情况下没有包装
  • 对于长文本,仅在指定的列宽内显示尽可能多的匹配(在下面第1行的示例中,第2列显示“非常适合”)
  • 可以通过拖动显示更多或更少文本的边框来调整列宽
  • 以下示例可以处理1。)

    库(闪亮)
    图书馆(DT)
    shinyApp(
    
    ui尝试使用rhandsontable而不是Datatable。它有一些惊人的特性。其中之一就是手动调整列大小。
    此文档将帮助您解决问题。

    尝试使用rhandsontable而不是Datatable。它有一些惊人的功能。其中之一是手动调整列大小。
    本文档将帮助您解决问题。

    我不知道如何使2和3容易一致,但您可以“手动”调整(通过滑块输入?)要显示的字符数和列的宽度。s

    以您为例,我为第一列添加了带滑块输入的文本截断(默认为10个字符)+居中+手动宽度调整(另一个滑块输入)

    library(shiny)
    library(DT)
    
    
    shinyApp(
      ui <- fluidPage(
        #tags$head(tags$style("#table  {white-space: nowrap;  }")),
        tagList(
          sliderInput("nb_chars","Number of chars to truncate to: ",min = 5,max = 80,step = 5,value = 10),
          sliderInput("col1_width","Width of col 1 in px :",min = 5,max = 100,step = 10,value = 50,post = "px")
        ),
        DT::dataTableOutput("table"),
        
      ),
      
      server <- function(input, output) {
        df = data.frame(
                        a=c(1,2,3),
                        b=c("A very long text!!!!!!!","B","C"), 
                        c=c("A","B","C"))
        nb_cols = ncol(df)+1#row names is 1 additional column
        col_widths <- reactive(c(input$col1_width,rep(50,nb_cols-1)))
        
        output$table <- DT::renderDataTable({
          df
        }, class="hover cell-border stripe nowrap",
        options = list(
          columnDefs = lapply(1:length(col_widths), function(i){
            width = col_widths()[i]
            list(
              width = paste0(width,"px"),
              targets = i-1
              ,className = 'dt-center'
              ,render =
                JS(
                  "function(data, type, row, meta) {",
                  sprintf("return type === 'display' && data && data.length > %s ?",input$nb_chars),
                  sprintf("'<span title=\"' + data + '\">' + data.substr(0, %s) + '...</span>' : data;",input$nb_chars),
                  "}"
                )
            )
          }
    
            )
        )
        )
        
      }
    )
    
    
    库(闪亮)
    图书馆(DT)
    shinyApp(
    
    ui我不知道如何使2和3容易一致,但您可以“手动”调整(通过滑块输入?)要显示的字符数和列的宽度

    以您为例,我为第一列添加了带滑块输入的文本截断(默认为10个字符)+居中+手动宽度调整(另一个滑块输入)

    library(shiny)
    library(DT)
    
    
    shinyApp(
      ui <- fluidPage(
        #tags$head(tags$style("#table  {white-space: nowrap;  }")),
        tagList(
          sliderInput("nb_chars","Number of chars to truncate to: ",min = 5,max = 80,step = 5,value = 10),
          sliderInput("col1_width","Width of col 1 in px :",min = 5,max = 100,step = 10,value = 50,post = "px")
        ),
        DT::dataTableOutput("table"),
        
      ),
      
      server <- function(input, output) {
        df = data.frame(
                        a=c(1,2,3),
                        b=c("A very long text!!!!!!!","B","C"), 
                        c=c("A","B","C"))
        nb_cols = ncol(df)+1#row names is 1 additional column
        col_widths <- reactive(c(input$col1_width,rep(50,nb_cols-1)))
        
        output$table <- DT::renderDataTable({
          df
        }, class="hover cell-border stripe nowrap",
        options = list(
          columnDefs = lapply(1:length(col_widths), function(i){
            width = col_widths()[i]
            list(
              width = paste0(width,"px"),
              targets = i-1
              ,className = 'dt-center'
              ,render =
                JS(
                  "function(data, type, row, meta) {",
                  sprintf("return type === 'display' && data && data.length > %s ?",input$nb_chars),
                  sprintf("'<span title=\"' + data + '\">' + data.substr(0, %s) + '...</span>' : data;",input$nb_chars),
                  "}"
                )
            )
          }
    
            )
        )
        )
        
      }
    )
    
    
    库(闪亮)
    图书馆(DT)
    shinyApp(
    用户界面