You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Shiny中renderDataTable调用as.datatable的警告并保留单元格格式

问题分析

出现该警告的核心原因是DT::renderDataTable的参数规则限制:

  • 当renderDataTable内部表达式返回普通数据框时,函数会自动调用datatable()构造DT对象,此时传入的server、plugins、options等外部参数均会生效
  • 当你已经在表达式内部通过as.datatable()返回了现成的DT对象时,renderDataTable外层的额外参数会被直接丢弃,因此触发警告
解决方法

将原本写在renderDataTable()外部的参数,全部移动到as.datatable()的参数列表中,renderDataTable()仅保留构造DT对象的逻辑即可,调整后既保留原有单元格格式效果,也不会再触发警告。

修改后完整代码
library(shiny)
library(shinydashboard)
library(DT)
library(formattable)

custom_color_picker <- function(x){
  sapply(x,function(x){
    if(x > 0){
      formattable::csscolor("#B7D1DA", format = "hex")
    } else {
      formattable::csscolor("#D38591", format = "hex")
    }
  }
  )
}

paddedcolor_bar <- function(color = "lightgray", fun = "proportion", fun2 = "custom_color_picker", ...) {
  fun <- match.fun(fun)
  fun2 <- match.fun(fun2)
  formatter("span",
            style = function(x) style(
              display = "inline-block",
              direction = "rtl",
              "unicode-bidi" = "plaintext",
              "border-radius" = "4px",
              "padding-right" = "2px",
              "background-color" = fun2(as.numeric(x), ...),
              width = sprintf("%010.4f%%", 100 * percent(fun(as.numeric(x), ...)))
            ))
}

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    DT::dataTableOutput("tabOut")   
  )
) 

server <- function(input, output) {
  output$tabOut <- DT::renderDataTable({
    tab <- data.frame(A = -5:20, B = runif(26,0,10), C = letters)
    tab[, 1] <- as.numeric(tab[, 1]) # 确认为数值类型
    as.datatable(
      formattable(tab, 
                  list("A"  = paddedcolor_bar("lightblue"),
                       "B" = formatter("span", x ~ sprintf("%10.2f", x, rank(-x))))
      , server = FALSE, plugins = 'natural', options = list(
        columnDefs = list(list(type = "natural", targets = "_all")))
    )
  })
}

shinyApp(ui, server)

内容的提问来源于stack exchange,提问作者MaskofIllusion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:06:04