R+Shiny+DT:自动右对齐数字列
R+Shiny+DT: automatically right align numeric columns
请看一下post末尾的reprex。
我对数字列和非数字列的混合感到困惑。
数值全部四舍五入到小数点后两位。
我使用 formatStyle 并手动 select 我想要右对齐的数字列。
不幸的是,在现实生活中闪亮的应用程序中,我每次都不知道我会有多少数字列,所以我需要一种方法来自动 select 它们以便对齐它们。
肯定是单线的,但是目前我还没有成功。
任何人都可以在这里帮助我吗?
非常感谢!
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-09-21 创建
你可以这样写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)
请看一下post末尾的reprex。 我对数字列和非数字列的混合感到困惑。 数值全部四舍五入到小数点后两位。 我使用 formatStyle 并手动 select 我想要右对齐的数字列。
不幸的是,在现实生活中闪亮的应用程序中,我每次都不知道我会有多少数字列,所以我需要一种方法来自动 select 它们以便对齐它们。
肯定是单线的,但是目前我还没有成功。 任何人都可以在这里帮助我吗? 非常感谢!
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-09-21 创建你可以这样写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)