首页 > 解决方案 > 将 kableExtra::cell_spec() 输出与自定义 S3 格式化方法相结合

问题描述

我正在尝试在包含一些自定义 S3 类的 HTML 表中为条件格式添加颜色。我怎样才能保留我用于 S3 类的格式化方法并且仍然改变表格中单元格的外观?

例如:

library(dplyr)
library(kableExtra)

df <- data.frame(a = c(-1.2345, 0, 1.2345), b = c(-1.2345, 0, 1.2345))

format.myclass <- function(x, ...) {
  paste(round(x, 2), "♥")
}

class(df$a) <- c("myclass", class(df$a))
class(df$b) <- c("myclass", class(df$b))

在此数据框中,此类的所有数字都正确显示:

> df
        a       b
1 -1.23 ♥ -1.23 ♥
2     0 ♥     0 ♥
3  1.23 ♥  1.23 ♥

但是当我将 kableExtra 样式属性添加到单元格时,它不再起作用:

df %>% mutate(a = cell_spec(a, color = ifelse(a<0, "red", "green"))) %>% 
  kable(., escape = F) %>%
  kable_styling()

有没有办法myclass在使用时保持格式cell_spec()


更新:显式调用类格式化程序使这项工作:

df %>% mutate(a = cell_spec(format.myclass(a), color = ifelse(a<0, "red", "green"))) %>% 
  kable(., escape = F) %>%
  kable_styling()

但是有没有办法为它的类自动调用这个格式化程序?

标签: rdplyrkable

解决方案


推荐阅读