#r #dt
#r #dt
Вопрос:
Любопытно, почему мы не можем применить стиль расходящихся типов datatables
.
В приведенном ниже коде iris
нет NAs, и для простоты я хочу применить расходящуюся схему к 150 записям. Все столбцы получат цвет, примененный к разделителю.Ранг длины, но тривиально делать это по столбцам…
library(DT);library(colorspace);library(dplyr)
data(iris)
dt=datatable(iris)
for (x in colnames(iris)) {
if(x=='Species')next
dt=dt %>%
formatStyle(x, color = tolower(diverging_hsv(150)[rank(iris$Sepal.Length)]))
}
Сообщение об ошибке отсутствует, но это не работает
Обратите внимание, что разные наборы данных с NAs искажают цвет:
dt <- datatable(airquality)
these=c('Wind','Ozone')
for (x in these) {
#v <- full_seq(unique(airquality[[x]]), .1)
v = airquality[[x]]
cs <- diverging_hsv(length(v))
dt <- dt %>%
formatStyle(x, backgroundColor = styleEqual(v, cs))
}
Комментарии:
1. Это не имеет ничего общего со
NA
значениями — вы отображаете значения не по порядку, а также, не дедуплицируя значения, одни и те же значения отображаются более чем на один цвет, где существуют дубликаты. Если вам нужен градиент, который не зависит от разницы в значениях, вы можете просто сделатьv <- sort(unique(airquality[[x]]))
. Вы также можете рассмотреть возможность использованияstyleInterval()
which сопоставляет цвета с привязанными значениями.
Ответ №1:
Похоже, вы не можете передать вектор значений непосредственно в аргумент color of formatStyle()
вместо этого вы можете использовать вспомогательную функцию styleEqual()
для сопоставления значений с цветами от 1 до 1:
library(DT)
library(colorspace)
library(dplyr)
library(tidyr)
dt <- datatable(iris)
for (x in colnames(iris)) {
if (x == 'Species') next
v <- full_seq(unique(iris[[x]]), .1)
cs <- diverging_hsv(length(v))
dt <- dt %>%
formatStyle(x, color = styleEqual(v, cs))
}
Комментарии:
1. Я соглашусь с этим, хотя я удалил зависимость tidyr и просто пошел
v = iris[[x]]
. Умное и простое решение, спасибо.2. Возможно, это не так надежно, как предполагалось изначально…
airquality
имеет неправильную окраску (что-то связанное с упорядочением или сортировкой)? см., Например, сообщение OG