R+Shiny+DT:自动右对齐数字列
Posted
技术标签:
【中文标题】R+Shiny+DT:自动右对齐数字列【英文标题】:R+Shiny+DT: automatically right align numeric columns 【发布时间】:2021-11-15 03:13:28 【问题描述】:请查看本文末尾的reprex。 我有一个混合了数字和非数字列的小标题。 数值均四舍五入到小数点后两位。 我使用 formatStyle 并手动选择要右对齐的数字列。
不幸的是,在现实生活中闪亮的应用程序中,我不知道每次我会有多少个数字列,所以我需要一种方法来自动选择它们以对齐它们。
它一定是单线,但到目前为止我一直没有成功。 任何人都可以在这里帮助我吗? 非常感谢!
library(shiny)
library(tidyverse)
library(DT)
#>
#> Attaching package: 'DT'
#> The following objects are masked from 'package:shiny':
#>
#> dataTableOutput, renderDataTable
round_all <- function(df, n)
res <- df %>% mutate(across(where(is.numeric), ~round(.x,n) ))
return(res)
set.seed(1234)
df <- tibble(x=letters[1:5], y=LETTERS[10:14],
w=rnorm(5), z=rnorm(5)) %>%
round_all(2)
ui <- fluidPage(
mainPanel(DTOutput("table"))
)
server <- function(input, output)
output$table <- renderDT(datatable(df) %>%
formatStyle(columns=c("w", "z"),
textAlign = 'right')
)
shinyApp(ui = ui, server = server)
#>
#> Listening on http://127.0.0.1:7374
由reprex package (v2.0.1) 于 2021 年 9 月 21 日创建
【问题讨论】:
【参考方案1】:你可以写例如numeric_cols <- df %>% keep(is.numeric) %>% colnames()
:
library(shiny)
library(tidyverse)
library(DT)
round_all <- function(df, n)
res <- df %>% mutate(across(where(is.numeric), ~ round(.x, n)))
return(res)
set.seed(1234)
df <- tibble(
x = letters[1:5], y = LETTERS[10:14],
w = rnorm(5), z = rnorm(5)
) %>%
mutate_if(is.numeric, ~ .x %>% round(2))
ui <- fluidPage(
mainPanel(DTOutput("table"))
)
server <- function(input, output)
numeric_cols <- df %>% keep(is.numeric) %>% colnames()
output$table <- renderDT(
datatable(df)
%>%
formatStyle(
columns = numeric_cols,
textAlign = "right"
))
shinyApp(ui = ui, server = server)
【讨论】:
谢谢!正是我想要的。以上是关于R+Shiny+DT:自动右对齐数字列的主要内容,如果未能解决你的问题,请参考以下文章
R Shiny 中 DT::datatable() 中冻结标头问题的解决方法
如何自动调整大小和WPF右对齐GridViewColumn数据