您可以在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
一个更通用的解决方案是创建styleEqual的新版本,如下所示:
df <- data.frame(x = c(1,.3,y = c(.3,-1),z = c(NA,-1,1))
newstyleEqual <- function (levels,values,default = NULL)
{
n = length(levels)
if (n != length(values))
stop("length(levels) must be equal to length(values)")
if (!is.null(default) && (!is.character(default) || length(default) !=
1))
stop("default must be null or a string")
if (n == 0)
return("''")
levels = DT:::jsValues(levels)
values = DT:::jsValues(values)
js = ""
for (i in seq_len(n)) {
if(levels[i]=="\"NA\""){ # needed because jsValues converts NA to a string
js = paste0(js,sprintf("isNaN(parseFloat(value)) ? %s : ",values[i]))
}else{
js = paste0(js,sprintf("value == %s ? %s : ",levels[i],values[i]))
}
}
default = if (is.null(default))
"value"
else jsValues(default)
DT::JS(paste0(js,default))
}
dt <- DT::datatable(df)
dt <- DT::formatStyle(dt,backgroundColor = newstyleEqual(c(-1,'red')))
dt
本文链接:https://www.f2er.com/3113247.html