From 5560ae0b31d2a64785404daa9bc225198f15c898 Mon Sep 17 00:00:00 2001 From: pvictor Date: Mon, 2 Nov 2020 11:31:48 +0100 Subject: [PATCH] fixed bug with numeric and groups (values dropped) --- R/apex.R | 2 +- tests/testthat/test-apex.R | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/R/apex.R b/R/apex.R index 1f14d6b..5b1a707 100644 --- a/R/apex.R +++ b/R/apex.R @@ -162,7 +162,7 @@ make_series <- function(mapdata, mapping, type = NULL, serie_name = NULL) { FUN = function(x) { data <- mapdata[mapdata$group %in% x, ] data <- data[, setdiff(names(data), "group"), drop = FALSE] - data <- data[match(x = x_order, table = data$x, nomatch = 0L), , drop = FALSE] + data <- data[order(match(x = data[["x"]], table = x_order, nomatch = 0L)), , drop = FALSE] dropNulls(list( name = x, type = multi_type(type), diff --git a/tests/testthat/test-apex.R b/tests/testthat/test-apex.R index f885762..b9b7175 100644 --- a/tests/testthat/test-apex.R +++ b/tests/testthat/test-apex.R @@ -57,7 +57,7 @@ test_that("make_series works", { expect_named(serie[[1]], c("name", "data")) }) -test_that("make_series works with group", { +test_that("make_series works with group (iris)", { mapping <- aes(x = Sepal.Length, y = Sepal.Width, fill = Species) mapdata <- lapply(mapping, rlang::eval_tidy, data = iris) serie <- make_series(mapdata, mapping) @@ -65,4 +65,31 @@ test_that("make_series works with group", { expect_length(serie, 3) expect_length(serie[[1]], 2) expect_named(serie[[1]], c("name", "data")) + + expect_identical( + lapply(serie, function(x) { + length(x$data) + }), + as.list(unlist(tapply(mapdata$fill, mapdata$fill, length, simplify = FALSE), use.names = FALSE)) + ) +}) + + +test_that("make_series works with group (mtcars)", { + mapping <- aes(x = mpg, y = disp, fill = cyl) + mapdata <- lapply(mapping, rlang::eval_tidy, data = mtcars) + expect_warning( + serie <- make_series(mapdata, mapping) + ) + expect_is(serie, "list") + expect_length(serie, 3) + expect_length(serie[[1]], 2) + expect_named(serie[[1]], c("name", "data")) + + expect_identical( + lapply(serie, function(x) { + length(x$data) + }), + as.list(unlist(tapply(mapdata$fill, factor(mapdata$fill, levels = unique(mapdata$fill)), length, simplify = FALSE), use.names = FALSE)) + ) })