r - 格式化数据框中的列,包括带有 DT 的小部件
问题描述
我正在尝试格式化由 DT 呈现的数据框(为特定列添加颜色,更改字体,...),并且我正在考虑使用 DT 中可用的格式函数(即formatStyle
,formatCurrency
)。
但是,这些函数只能在数据表上使用,并且我无法将我的数据框转换为数据表,因为它破坏了我在特定列中插入的不同小部件。
library(shiny)
shinyInput <- function(FUN, len, id, ...) {
inputs <- character(len)
for (i in seq_len(len)) {
inputs[i] <- as.character(FUN(paste0(id, i), ...))
}
inputs
}
df <- iris
df$hist <- shinyInput(actionButton, nrow(df), "hist_", label = "Hist", onclick = 'Shiny.onInputChange(\"select_button\", this.id)' )
df$num <- shinyInput(numericInput, nrow(df), "num_", label = NULL, value=NULL)
ui <- dashboardBody(box(fluidPage(DT::dataTableOutput('DTdf'))))
server <- function(input, output){
dfDT <- reactive({df})
output$DTdf <- DT::renderDT(
dfDT(),
escape=F,
options = list(
preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')))
}
shinyApp(ui=ui, server=server)
我试图renderDT
像这样替换函数的第一个参数,但小部件停止工作。
output$DTdf <- DT::renderDT(
datatable(dfDT()),
escape=F,
options = list(
preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } ')))
我发现格式化列的一种解决方案是直接使用 HTML 代码更改其内容,例如,如果我想将喜欢的物种更改为粗体:
df$Species <- paste0("<div><b>", df$Species, "</b></div>")
但这会在我的程序中导致很多问题,我正在寻找一种解决方案,只改变 . 的视觉方面,而DToutput
不是我的数据框中的数据。
解决方案
Try this
server <- function(input, output){
dfDT <- reactive({df})
output$DTdf <- DT::renderDT({
datatable(dfDT(),
escape=F,
options = list(
preDrawCallback = JS('function() { Shiny.unbindAll(this.api().table().node()); }'),
drawCallback = JS('function() { Shiny.bindAll(this.api().table().node()); } '))) })
}
推荐阅读
- php - 将字符串数组转换为 Laravel 查询生成器的数组
- rust - 是否可以在 Rust 中一般访问枚举值?
- python - Python - 长时间运行进程的状态(多个进程的可能性)
- python - 在 scipy 的差分进化算法中添加 minimumr_kwargs
- azure - 为什么 Blazor 应用程序中的 XML 验证会在 localhost 和 Azure 静态 Web 应用程序上提供不同的消息?
- hyperlink - 我想创建一个带有多个 pdf 链接的 whatsapp 共享链接,该链接在消息上显示单个单词的超链接
- c++ - 如何在 C++ 中使用模板参数作为参数覆盖方法?
- google-apps-script - 将单元格复制到另一个工作表的脚本,例如,基于单元格的背景颜色
- javascript - 运行 php 脚本“隐藏”
- docker - 将 Hyperledger 的 orderer.exemple.com 上传到 docker compose 时出错