删除rhandsontable热图中的NA值

时间:2016-03-31 03:56:28

标签: r shiny heatmap handsontable

我希望除了NA值之外的所有值都使用rhandsontable显示颜色。因此,例如,如果您在安装了rhandsontable的R控制台中运行以下代码,则第一列将为灰色,因为rhandsontable无法处理NA和数值,我相信。但是,如果你移除一个NA,使细胞变成空白,其余的细胞会重新获得颜色。

> MAT = matrix(rnorm(50), nrow = 10, dimnames = list(LETTERS[1:10],
+                                                    letters[1:5]))
> MAT[1,1] <- NA
> rhandsontable(MAT) %>% hot_heatmap()

在我的实际数据集中,我有很多NA值,并且我不希望每个列都显示为灰色。如何告诉rhandsontable只灰显NA值,而不是列中的其余部分?

2 个答案:

答案 0 :(得分:0)

我有一个黑客...

我用非常具体的0.001替换NA值。

然后我调整了渲染器,使其为0.001浅灰色的细胞着色:

# Used by hot_heatmap
renderer_heatmap = function(color_scale) {
  renderer = gsub("\n", "", "
                  function (instance, td, row, col, prop, value, cellProperties) {
                  Handsontable.renderers.TextRenderer.apply(this, arguments);
                  heatmapScale  = chroma.scale(['%s1', '%s2']);
                  if (instance.heatmap[col]) {
                    mn = instance.heatmap[col].min;
                    mx = instance.heatmap[col].max;
                    pt = (parseInt(value, 10) - mn) / (mx - mn);
                    if (value == 0.001) {
                      td.style.backgroundColor = 'lightgrey';
                    } else {
                      td.style.backgroundColor = heatmapScale(pt).hex();
                    }
                  }
                  }
                  ")
  renderer = gsub("%s1", color_scale[1], renderer)
  renderer = gsub("%s2", color_scale[2], renderer)
  renderer
}

不是我最好的时刻,欢迎更好的答案!

答案 1 :(得分:0)

问题仍然存在,但是无论如何。.rhandsontable(我有0.3.7)的现代版本通过将这些单元格显示为灰色而不会影响其他单元格的颜色来正确处理NA。