R语言formattable包设置表头字体大小时列格式失效如何解决
问题原因
你在formattable的格式配置列表中插入names(df) <- f2(names(df))赋值语句,会直接修改原数据框的列名,破坏formattable原本的列名-格式匹配规则,导致mpg、disp两列的自定义格式无法匹配到对应列,自然就失效了。
formattable原生没有直接给表头绑定formatter的配置项,你可以通过修改渲染后的HTML内容实现表头样式调整,同时保留原有列的格式:
library(formattable) library(htmltools) data(mtcars) df <- mtcars # 注意这里的颜色值要加引号,否则R会识别为变量导致运行报错 f1 <- formatter("span", style = x ~ style(color = ifelse(x > 0, "red", "blue"), "font-size:20px")) f2 <- formatter("span", style = x ~ style("font-size:20px")) # 先生成原有列格式的表格 ft <- formattable(df, list( `mpg` = f1, `disp` = f2 )) # 转换为htmlwidget对象,修改表头样式 ft_html <- as.htmlwidget(ft) ft_html$x$html <- gsub("<th>", "<th style='font-size:20px'>", ft_html$x$html) # 输出查看效果 ft_html
如果不想手动修改HTML内容,也可以结合kableExtra包实现:
library(formattable) library(kableExtra) data(mtcars) df <- mtcars f1 <- formatter("span", style = x ~ style(color = ifelse(x > 0, "red", "blue"), "font-size:20px")) f2 <- formatter("span", style = x ~ style("font-size:20px")) # 提前对列应用格式 df$mpg <- f1(df$mpg) df$disp <- f2(df$disp) # 渲染表格并设置表头样式 kbl(df, escape = FALSE) %>% header_all(extra_css = "font-size:20px")
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

