Реактивная раскраска в таблице DT - PullRequest
0 голосов
/ 24 апреля 2020

нужна помощь. Ниже приложение. ColB должен быть окрашен на основе чисел в ColA. Ниже приведена таблица условий

enter image description here

Просто вкратце: если ColB равно 2, значит, оно меньше 6 (12/2), оно должно быть красный и аналогично для других. Я попытался создать код самостоятельно и придумал ниже. Но похоже, что в коде есть какая-то проблема. Я также приложил вывод ниже, и лог c не работает должным образом.

---
title: "Untitled"
runtime: shiny
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
---

```{r setup, include=FALSE}
library(flexdashboard)
library(DT)
```

```{r}
tab1 <- data.frame(ColA = c(12,34,45,56), ColB = c(2,32,30,56))
```

Column {data-width=650}
-----------------------------------------------------------------------

### Chart A

```{r}
DT::DTOutput("table1")
output$table1 <- DT::renderDT(
    datatable(tab1))
```

Ниже вывод, который я получил enter image description here

Так как в соответствии с кодом выделенные стрелки показывают цвет.

Первая стрелка (предполагается, что она красная, но отображается желтым) Вторая стрелка (должна быть желтой, но зеленым) Примечание: ColB случайным образом генерируется, и вы можете не увидеть эти цифры при запуске. Но вы наблюдаете случайным образом, эту проблему вы наверняка найдете, когда будете бегать. Не уверен, что не так в коде. Ниже приведен код для вашей справки

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете использовать formatStyle из DT ( ссылка ):

---
title: "Untitled"
runtime: shiny
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
---

```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
library(DT)
```

```{r}
tab1 <- data.frame(ColA = c(12,34,45,56), ColB = c(2,32,30,56)) %>%
  dplyr::mutate(backgroundColB = case_when(
    ColA==ColB ~ 1,
    ColA/2>ColB ~ -1,
    ColA/2<ColB ~ 0
  ))
```

Column {data-width=650}
-----------------------------------------------------------------------

### Chart A

```{r}
DT::DTOutput("table1")
output$table1 <- DT::renderDT(
    datatable(tab1, options=list(columnDefs = list(list(visible=FALSE, targets=2)))) %>%
  formatStyle('ColB', "backgroundColB",
              backgroundColor = styleInterval(c(-.5,.5), c("red","yellow","green") ))
)
```
...