在 Shiny 应用程序中,我在
datatable
中有一列数字,出于安全原因,某些值已被隐藏,我们希望用特定的字符串替换它们,在这里我将其称为 "my_string"
。在此列上排序时,这些抑制值需要按照“小于”所有实际数字进行排序。在此列中,除已编码为 -1
的抑制值外,所有值均为正值。我尝试将
-1
重新编码为
"my_string"
(这会将列强制为 character
)并使用 natural
插件对字符编码数字进行正确排序,但
"my_string"
正在被排序就好像它大于所有数值。处理此问题的另一种可能方法可能是使用
JavaScript
回调将
-1
替换为字符串,但我不知道如何编写该脚本并将其正确添加到 datatable
。这是我使用
natural
插件的尝试。如果它按照我想要的方式工作,带有“my_string”的行将位于列表的底部而不是顶部。
# Example data, representing how the data comes to me
my_mtcars <- mtcars[1:6, 1:4]
my_mtcars[1, 4] <- -1
# Here I am recoding the -1
my_mtcars[my_mtcars == -1] <- 'my_string'
# This is our demo app.R
library(shiny)
library(DT)
ui <- fluidPage(
dataTableOutput('example')
)
server <- function(input, output) {
output$example <- renderDataTable(
my_mtcars,
server = FALSE,
plugins = 'natural',
options = list(columnDefs = list(list(type = 'natural', targets = '_all')))
)
}
shinyApp(ui = ui, server = server)
请参阅 DT 文档中的列渲染:
https://rstudio.github.io/DT/options.htmlhttps://datatables.net/reference/option/columns.render
my_mtcars <- mtcars[1:6, 1:4]
my_mtcars[1, 4] <- -1
formatSuppressedValues <- JS("
function(data, type) {
if (type !== 'display') return data;
if (data !== -1) return data;
return 'my_string';
}
")
library(shiny)
library(DT)
ui <- fluidPage(
DT::dataTableOutput('example')
)
server <- function(input, output) {
output$example <- DT::renderDataTable(
my_mtcars,
server = FALSE,
options = list(
columnDefs = list(list(
targets = '_all',
render = formatSuppressedValues
))
)
)
}
shinyApp(ui = ui, server = server)