R语言使用reactable构建日历热力图出现数值类型错误如何解决
错误原因
你的代码中直接对包含因子类型year列的完整bls数据集调用min()、max(),这两个函数仅支持全为数值类型的数据框,因此触发only defined on a data frame with all numeric-alike variables报错。
修正方案
提前对排除year列的所有数值列计算全局最值,再代入样式逻辑即可,完整可运行代码如下:
# 自定义配色函数 BuYlRd <- function(x) rgb(colorRamp(c("#7fb7d7", "#ffffbf", "#fc8d59"))(x), maxColorValue = 255) # 预计算所有月份数值列的全局最值,排除因子类year列 # 无dplyr环境可替换为:num_cols <- bls[, !names(bls) %in% "year"] num_cols <- dplyr::select(bls, -year) global_min <- min(num_cols, na.rm = TRUE) global_max <- max(num_cols, na.rm = TRUE) # 生成reactable热力图表 reactable( bls, defaultColDef = colDef( style = function(value) { if (!is.numeric(value)) return() normalized <- (value - global_min) / (global_max - global_min) color <- BuYlRd(normalized) list(background = color) }, format = colFormat(digits = 2), minWidth = 50 ), columns = list( # 单独配置year列属性,不应用数值格式化 year = colDef(name = "Year", sortable = TRUE, align = "left") ), bordered = TRUE )
内容的提问来源于stack exchange,提问作者bodega18
相关产品推荐
相关产品推荐

