您如何在数据表的styleEqual()中指定缺失或不适用?

问题描述 投票:1回答:1

我有一个R数据表对象,其中的空单元格对应于数据帧中的NA(相关矩阵)。我想更改单元格包含1,-1或为空白的背景颜色。

此代码创建一个表,并使用styleEqual()标记带有1或-1的单元格,但是我找不到适合丢失/空白/ NA的规范。如何在styleEqual()中识别空白单元格?

df <- data.frame(x = c(1, .3, NA),
                 y = c(.3, 1, -1),
                 z = c(NA, -1, 1))
dt <- DT::datatable(df)
dt <- DT::formatStyle(dt, c(1:ncol(df)), backgroundColor = styleEqual(c(-1, 1, NA), c('gray', 'green', 'red')))
dt

结果数据表:

Resulting datatable

r datatable na dt
1个回答
1
投票

您可以通过查看styleEqual的源代码来获得答案。它从JS函数输出一个字符串,该字符串具有类“ JS_EVAL”,您可以通过直接调用styleEqual

进行查看。
styleEqual(c(-1, 1, NA), c('gray', 'green', 'red'))

# [1] "value == -1 ? \"gray\" : value == 1 ? \"green\" : value == \"NA\" ? \"red\" : value"
# attr(,"class")
# [1] "JS_EVAL"

从那里,您只需要了解javascript如何处理NA值(NaN),就可以创建自己的配色方案,然后可以通过修改值来创建自己的字符串

myJScolor = "value == -1 ? \"gray\" : value == 1 ? \"green\" : isNaN(parseFloat(value)) ? \"red\" : value"
class(myJScolor) = "JS_EVAL"
myJScolor
dt2 <- DT::formatStyle(dt, c(1:ncol(df)), backgroundColor = myJScolor )
dt2
© www.soinside.com 2019 - 2024. All rights reserved.