当应用格式化的列在 DT::datatable()
DataTables的自动列过滤功能失效。例如
library(DT)
a <- letters[1:10]
b <- 1:10
df <- data.frame(a, b)
datatable(df, filter="bottom") %>% formatCurrency(columns = "b", currency = "$")
列的过滤器 b
失败。
我想这是一个很普遍的问题,一定会有解决办法。我一直在寻找,但至今没有成功。如果有人能给我指出解决这个问题的方法,我将感激不尽。
我知道,通过使用 JS
DT网站上的回调函数(https:/rstudio.github.ioDToptions.html。 请看4.5行渲染,并在运行时使用 filter="top"
),可以过滤 与 格式化的列。但是,我正在尝试实现一个通用的解决方案,以实现一个 R
包,所以我希望有一个 R
解决办法。
我有一个方法,在某些情况下是有效的。这个方法是将原始数字列复制到一个新的列中,在渲染时隐藏。但 "链接 "格式化的数字(column
)到原始数字列(values_column
)在 formatStyle
. 然后,幸运的是,也不完全知道为什么,在格式化的列上搜索可以。但是,只有在后缀的情况下(如 %
),但对前缀则不适用($
)或大数格式,千位数用逗号表示。
这些情况的代码都在下面。
我不介意使用这种变通方法,但对DT的内部运作不够了解,无法使前缀和其他格式工作。
library(DT)
a <- letters[1:10]
b <- 1:10
df <- data.frame(a, b)
xx <-
datatable(
data = df,
filter = "bottom",
options = list(columnDefs = list(list(
targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE
)))
)
xx$x$data$hide_b <- xx$x$data$b
xx$x$data$b <- paste(xx$x$data$b, "%")
attr(xx$x, "colnames") <- colnames(xx$x$data)
xx %>%
formatStyle(
columns = "b",
valueColumns = "hide_b"
)
library(DT)
a <- letters[1:10]
b <- 1:10
df <- data.frame(a, b)
xx <-
datatable(
data = df,
filter = "bottom",
options = list(columnDefs = list(list(
targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE
)))
)
xx$x$data$hide_b <- xx$x$data$b
xx$x$data$b <- paste("$", xx$x$data$b)
attr(xx$x, "colnames") <- colnames(xx$x$data)
xx %>%
formatStyle(
columns = "b",
valueColumns = "hide_b"
)
library(DT)
a <- letters[1:10]
b <- 1:10*10^6
df <- data.frame(a, b)
xx <-
datatable(
data = df,
filter = "bottom",
options = list(columnDefs = list(list(
targets = which(stringr::str_detect(colnames(df), "hide")), visible = FALSE
)))
)
xx$x$data$hide_b <- xx$x$data$b
xx$x$data$b <- format(xx$x$data$b,digits = 1, scientific = FALSE, big.mark = ",")
attr(xx$x, "colnames") <- colnames(xx$x$data)
xx %>%
formatStyle(
columns = "b",
valueColumns = "hide_b"
)
使用 DR::renderDT
与 server=TRUE
(默认情况下)在Shiny应用内使用常规的 DT::format*
职能。外部 Shiny
的上下文,例子还是不能用。但这与我的情况无关,因为表格会放在Shiny应用中。