首页 > 解决方案 > 为什么 Datatable 使用闪亮打破最后一个酒吧?

问题描述

我们有一个闪亮的应用程序,它封装了一个 DT,而 DT 又包含一个绿色条,如下图所示。有没有人在最后一行遇到同样的问题?我们已经启动并运行的其他应用程序运行良好。

在此处输入图像描述

标签: rshinydt

解决方案


你可能用过styleColorBar. 使用此函数,包含最小值的单元格的条的长度为 0,因此您得到的输出是预期的。要获得一个长度与值成比例的条形,您可以使用styleColorBar2下面提供的我的函数。此函数接受两种颜色,一种用于负值,另一种用于正值。

library(DT)

modelData <- data.frame(Channel = c("A", "B", "C"),
                        Current = c(2000, 3000, 4000),
                        Modified = c(2500, 3500, 3000),
                        New_Membership = c(500, 500, -1000),
                        stringsAsFactors = FALSE)

styleColorBar2 <- function (data, color1, color2) 
{
  M <- max(abs(data), na.rm = TRUE)
  js <- c(
    "value <= 0 ? ",  
    sprintf("'linear-gradient(90deg, transparent ' + (1+value/%f) * 100 + '%%, %s ' + (1+value/%f) * 100 + '%%)'", 
            M, color1, M),
    " : ",
    sprintf("'linear-gradient(90deg, transparent ' + (1-value/%f) * 100 + '%%, %s ' + (1-value/%f) * 100 + '%%)'", 
            M, color2, M) 
  )
  JS(js)
}

datatable(
  modelData , selection = 'none', editable = TRUE
) %>% formatStyle(
  'New_Membership',
  background = styleColorBar2(modelData$New_Membership, "red", "lightblue"),
  backgroundSize = '100% 50%',
  backgroundRepeat = 'no-repeat',
  backgroundPosition = 'center'
)

推荐阅读