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