Я строю на решении , предоставленном @Jon_Spring.Я хочу изменить некоторые параметры графика на основе выбранной дезагрегации.Все течет через трубу, поэтому я начал искать рекомендации по условной оценке с использованием труб .
Я думал о том, чтобы использовать {if }
подход в трубе:
{if(input$diss=="Total")
dySeries("1", label = "All") else
dySeries("man", label = "Male") %>%
dySeries("woman", label = "Female")
}
Этот шаг наступает после вызова dygraph()
.Моя идея заключалась в том, чтобы сказать: «если нет разукрупнения, используйте dySeries("1", label = "All")
, в противном случае используйте dySeries("man", label = "Male") %>% dySeries("woman", label = "Female")
.
Но я получаю ошибку: оператор
$ недопустим для атомарноговекторы
Я на правильном пути или есть лучший способ создания параметров условного графика для графика на основе входных данных?
---
title: "test"
output:
flexdashboard::flex_dashboard:
theme: bootstrap
runtime: shiny
---
```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
library(tibbletime)
library(dygraphs)
library(magrittr)
library(xts)
```
```{r global, include=FALSE}
# generate data
set.seed(1)
dat <- data.frame(date = seq(as.Date("2018-01-01"),
as.Date("2018-06-30"),
"days"),
sex = sample(c("male", "female"), 181, replace=TRUE),
lang = sample(c("english", "spanish"), 181, replace=TRUE),
age = sample(20:35, 181, replace=TRUE))
dat <- dplyr::sample_n(dat, 80)
```
Sidebar {.sidebar}
=====================================
```{r}
radioButtons("diss", label = "Disaggregation",
choices = list("All" = "Total",
"By Sex" = "sex",
"By Language" = "lang"),
selected = "Total")
```
Page 1
=====================================
```{r plot}
renderDygraph({
grp_col <- rlang::sym(input$diss)
dat %>%
mutate(Total = 1) %>%
mutate(my_group = !!grp_col) %>%
group_by(date = lubridate::floor_date(date, "1 week"), my_group) %>%
count() %>% spread(my_group, n) %>% ungroup() %>%
padr::pad() %>% replace(is.na(.), 0) %>%
xts::xts(order.by = .$date) %>%
dygraph() %>%
dyRangeSelector() %>%
{if(input$diss=="Total")
dySeries("1", label = "All") else
dySeries("male", label = "Male") %>%
dySeries("female", label = "Female")
} %>%
dyOptions(
useDataTimezone = FALSE,
stepPlot = TRUE,
drawGrid = FALSE,
fillGraph = TRUE,
colors = ifelse(input$diss=="Total",
"blue",
c("purple", "orange"))
)
})
```