From e9f7d66c0a187cc860fda2f4a14f7f819e7702e3 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Fri, 14 Jun 2019 16:31:11 -0400 Subject: [PATCH 01/16] Use tidyverse 0-length recycling rules in shape computations --- R/shape.R | 2 +- R/size.R | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/R/shape.R b/R/shape.R index 33cc2cc4e..295eee2f9 100644 --- a/R/shape.R +++ b/R/shape.R @@ -40,7 +40,7 @@ shape_broadcast <- function(x, to) { dim_x <- n_dim2(dim_x, dim_to)$x dim_to[[1]] <- dim_x[[1]] # don't change number of observations - ok <- dim_x == dim_to | dim_x == 1 | dim_to == 0 + ok <- dim_x == dim_to | dim_x == 1 if (any(!ok)) { stop_incompatible_cast(x, to, details = "Non-recyclable dimensions") } diff --git a/R/size.R b/R/size.R index e1cb353ff..fa10f128d 100644 --- a/R/size.R +++ b/R/size.R @@ -80,8 +80,6 @@ vec_size_common <- function(..., .size = NULL, .absent = 0L) { vec_size2 <- function(nx, ny) { if (nx == ny) { nx - } else if (nx == 0L || ny == 0L) { - 0L } else if (nx == 1L) { ny } else if (ny == 1L) { From 031e4665e905be5f464942488b9c7a065e9213b2 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Fri, 14 Jun 2019 16:31:26 -0400 Subject: [PATCH 02/16] Update shape tests --- tests/testthat/test-shape.R | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-shape.R b/tests/testthat/test-shape.R index 12b13f74c..0401b039d 100644 --- a/tests/testthat/test-shape.R +++ b/tests/testthat/test-shape.R @@ -17,6 +17,7 @@ test_that("length is ignored", { expect_equal(shape_common(int(5, 1), int(10, 1)), 1L) expect_equal(shape_common(int(5, 1, 2), int(10, 1, 2)), c(1L, 2L)) expect_equal(shape_common(int(10, 1, 2), int(5, 1, 2)), c(1L, 2L)) + expect_equal(shape_common(int(0, 1, 5), int(1, 5, 1)), c(5L, 5L)) }) test_that("recycling rules applied", { @@ -29,8 +30,8 @@ test_that("recycling rules applied", { expect_equal(shape_common(int(1, 5, 1), int(1, 1, 5)), c(5L, 5L)) expect_equal(shape_common(int(1, 1, 1), int(1, 5, 5)), c(5L, 5L)) - expect_equal(shape_common(int(1, 0, 5), int(1, 5, 1)), c(0L, 5L)) - expect_equal(shape_common(int(1, 5, 0), int(1, 1, 5)), c(5L, 0L)) + expect_error(shape_common(int(1, 0, 5), int(1, 5, 1)), "0, 5") + expect_error(shape_common(int(1, 5, 0), int(1, 1, 5)), "0, 5") }) # broadcasting ------------------------------------------------------------- @@ -53,7 +54,7 @@ test_that("can broadcast to higher dimension, but not lower", { ) }) -test_that("recyling rules applied", { +test_that("recycling rules applied", { expect_equal( shape_broadcast(array(1:4, c(1, 1, 4)), int(0, 4, 4))[1, , ], matrix(1:4, 4, 4, byrow = TRUE) @@ -63,6 +64,12 @@ test_that("recyling rules applied", { shape_broadcast(array(1:4, c(1, 4, 1)), int(0, 4, 4))[1, , ], matrix(1:4, 4, 4) ) + + expect_error( + shape_broadcast(array(1L, c(1, 2)), int(1, 0)), + "Non-recyclable dimensions", + class = "vctrs_error_incompatible_cast" + ) }) test_that("shape of vector not supported", { From ffeb3d0d4f7bded46b3196d26eaf700c8179b12f Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Fri, 14 Jun 2019 16:52:33 -0400 Subject: [PATCH 03/16] Add more recycling corner cases --- tests/testthat/test-shape.R | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/testthat/test-shape.R b/tests/testthat/test-shape.R index 0401b039d..a8086e34c 100644 --- a/tests/testthat/test-shape.R +++ b/tests/testthat/test-shape.R @@ -30,6 +30,7 @@ test_that("recycling rules applied", { expect_equal(shape_common(int(1, 5, 1), int(1, 1, 5)), c(5L, 5L)) expect_equal(shape_common(int(1, 1, 1), int(1, 5, 5)), c(5L, 5L)) + expect_equal(shape_common(int(1, 0, 5), int(1, 1, 1)), c(0L, 5L)) expect_error(shape_common(int(1, 0, 5), int(1, 5, 1)), "0, 5") expect_error(shape_common(int(1, 5, 0), int(1, 1, 5)), "0, 5") }) @@ -65,11 +66,22 @@ test_that("recycling rules applied", { matrix(1:4, 4, 4) ) + expect_equal( + shape_broadcast(array(1L, c(1, 1)), int(1, 0)), + matrix(integer(), nrow = 1) + ) + expect_error( shape_broadcast(array(1L, c(1, 2)), int(1, 0)), "Non-recyclable dimensions", class = "vctrs_error_incompatible_cast" ) + + expect_error( + shape_broadcast(array(1L, c(1, 0)), int(1, 1)), + "Non-recyclable dimensions", + class = "vctrs_error_incompatible_cast" + ) }) test_that("shape of vector not supported", { From 6a40324642a584284418feb749571dd0dca0c025 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 10:29:47 -0400 Subject: [PATCH 04/16] Remove size swallowing feature of 0-size inputs --- src/size-common.c | 7 ------- tests/testthat/test-size.R | 12 +++++++++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/size-common.c b/src/size-common.c index 1baf5ad85..cf066d0f1 100644 --- a/src/size-common.c +++ b/src/size-common.c @@ -68,13 +68,6 @@ static SEXP vctrs_size2_common(SEXP x, SEXP y, struct counters* counters) { if (nx == ny) { return x; } - if (nx == 0) { - return x; - } - if (ny == 0) { - counters_shift(counters); - return y; - } if (nx == 1) { counters_shift(counters); return y; diff --git a/tests/testthat/test-size.R b/tests/testthat/test-size.R index 9de5e6f12..7b1ffb533 100644 --- a/tests/testthat/test-size.R +++ b/tests/testthat/test-size.R @@ -66,9 +66,15 @@ test_that("`NULL` is treated as the absence of input", { expect_equal(vec_size_common(1:5, NULL), vec_size_common(1:5)) }) -test_that("length 0 vectors force a common size of 0", { - expect_equal(vec_size_common(integer()), 0) - expect_equal(vec_size_common(1:5, integer()), 0) +test_that("size 1 is overshadowed by any other size", { + expect_equal(vec_size_common(1, integer()), 0) + expect_equal(vec_size_common(1, 1:5), 5) +}) + +test_that("if not size 1, sizes must be identical", { + expect_equal(vec_size_common(integer(), integer()), 0) + expect_error(vec_size_common(1:2, integer()), class = "vctrs_error_incompatible_size") + expect_error(vec_size_common(1:2, 1:3), class = "vctrs_error_incompatible_size") }) test_that("argument tags are forwarded", { From d2c4317caf35f87c75d79a1bb3432067e91b4a0e Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 10:33:18 -0400 Subject: [PATCH 05/16] Tweak `vec_recycle_common()` tests to reflect recycling rules --- tests/testthat/test-recycle.R | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/testthat/test-recycle.R b/tests/testthat/test-recycle.R index a792bb487..d41847141 100644 --- a/tests/testthat/test-recycle.R +++ b/tests/testthat/test-recycle.R @@ -20,24 +20,20 @@ test_that("equal lengths returned as is", { expect_equal(vec_recycle_common(x[0], x[0]), list(x[0], x[0])) }) -test_that("length 1 vec_recycle_commond to length of longest", { +test_that("vec_recycle_common recycles size 1 to any other size", { x1 <- 1 x3 <- rep(1, 3) + x0 <- numeric() expect_equal(vec_recycle_common(x1, x3), list(x3, x3)) expect_equal(vec_recycle_common(x3, x1), list(x3, x3)) -}) - -test_that("length 0 causes both outputs to be zero", { - x <- 1:3 - - expect_equal(vec_recycle_common(x, x[0]), list(x[0], x[0])) - expect_equal(vec_recycle_common(x[0], x), list(x[0], x[0])) + expect_equal(vec_recycle_common(x1, x0), list(x0, x0)) }) test_that("incompatible lengths get error messages", { expect_error(vec_recycle_common(1:2, 1:3), class = "vctrs_error_incompatible_size") expect_error(vec_recycle_common(1:3, 1:2), class = "vctrs_error_incompatible_size") + expect_error(vec_recycle_common(numeric(), 1:2), class = "vctrs_error_incompatible_size") }) # Matrices ---------------------------------------------------------------- From a363968e753fe9135eb656f1c911c28bee29f61f Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 10:40:41 -0400 Subject: [PATCH 06/16] Update data frame / matrix recycling tests --- tests/testthat/test-recycle.R | 46 +++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/tests/testthat/test-recycle.R b/tests/testthat/test-recycle.R index d41847141..077ec0f19 100644 --- a/tests/testthat/test-recycle.R +++ b/tests/testthat/test-recycle.R @@ -41,43 +41,63 @@ test_that("incompatible lengths get error messages", { test_that("can vec_recycle_common matrices", { x <- matrix(nrow = 4, ncol = 4) x1 <- x[1, , drop = FALSE] - x0 <- x[0, , drop = FALSE] expect_equal(vec_recycle_common(x, x), list(x, x)) expect_equal(vec_recycle_common(x1, x), list(x, x)) - expect_equal(vec_recycle_common(x0, x), list(x0, x0)) +}) + +test_that("recycling matrices respects incompatible sizes", { + x <- matrix(nrow = 4, ncol = 4) + x2 <- x[1:2, , drop = FALSE] + x0 <- x[0, , drop = FALSE] + + expect_error(vec_recycle_common(x2, x), class = "vctrs_error_incompatible_size") + expect_error(vec_recycle_common(x0, x), class = "vctrs_error_incompatible_size") }) test_that("can vec_recycle_common data frames", { x <- data.frame(a = rep(1, 3), b = rep(2, 3)) x1 <- vec_slice(x, 1L) - x0 <- vec_slice(x, integer()) expect_equal(vec_recycle_common(x, x), list(x, x)) expect_equal(vec_recycle_common(x1, x), list(x, x)) - expect_equal(vec_recycle_common(x0, x), list(x0, x0)) +}) + +test_that("recycling data frames respects incompatible sizes", { + x <- data.frame(a = rep(1, 3), b = rep(2, 3)) + x2 <- vec_slice(x, 1:2) + x0 <- vec_slice(x, integer()) + + expect_error(vec_recycle_common(x2, x), class = "vctrs_error_incompatible_size") + expect_error(vec_recycle_common(x0, x), class = "vctrs_error_incompatible_size") }) test_that("can vec_recycle_common matrix and data frame", { mt <- matrix(nrow = 2, ncol = 2) df <- data.frame(x = c(1, 1), y = c(2, 2)) - expect_equal( - vec_recycle_common(vec_slice(mt, integer()), df), - list(vec_slice(mt, 0L), vec_slice(df, 0L)) - ) expect_equal( vec_recycle_common(vec_slice(mt, 1L), df), list(mt, df) ) - expect_equal( - vec_recycle_common(mt, vec_slice(df, 0L)), - list(vec_slice(mt, 0L), vec_slice(df, 0L)) - ) - expect_equal( vec_recycle_common(mt, vec_slice(df, 1L)), list(mt, df) ) }) + +test_that("recycling data frames with matrices respects incompatible sizes", { + mt <- matrix(nrow = 2, ncol = 2) + df <- data.frame(x = c(1, 1), y = c(2, 2)) + + expect_error( + vec_recycle_common(vec_slice(mt, integer()), df), + class = "vctrs_error_incompatible_size" + ) + + expect_error( + vec_recycle_common(mt, vec_slice(df, 0L)), + class = "vctrs_error_incompatible_size" + ) +}) From bd32b4acf251a564c6508f66fa835b17f26f3e94 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 10:51:14 -0400 Subject: [PATCH 07/16] Prevent `vec_recycle()` from always allowing `size = 0` --- src/size.c | 4 ---- tests/testthat/test-recycle.R | 24 +++++++++++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/size.c b/src/size.c index be68f1918..598f94487 100644 --- a/src/size.c +++ b/src/size.c @@ -169,10 +169,6 @@ SEXP vec_recycle(SEXP x, R_len_t size) { return x; } - if (size == 0L) { - return vec_slice(x, R_NilValue); - } - if (n_x == 1L) { // FIXME: Replace with ALTREP repetition SEXP i = PROTECT(Rf_allocVector(INTSXP, size)); diff --git a/tests/testthat/test-recycle.R b/tests/testthat/test-recycle.R index 077ec0f19..0302d4374 100644 --- a/tests/testthat/test-recycle.R +++ b/tests/testthat/test-recycle.R @@ -1,4 +1,26 @@ -context("test-vec_recycle_common") +context("test-recycle") + +# vec_recycle ------------------------------------------------------------- + +test_that("vec_recycle recycles size 1 to any other size", { + x <- 1 + x0 <- numeric() + x2 <- c(x, x) + + expect_equal(vec_recycle(x, 1), x) + expect_equal(vec_recycle(x, 0), x0) + expect_equal(vec_recycle(x, 2), x2) +}) + +test_that("incompatible lengths get error messages", { + x2 <- c(1, 2) + + expect_error(vec_recycle(x2, 1), "2, 1") + expect_error(vec_recycle(x2, 0), "2, 0") + expect_error(vec_recycle(x2, 3), "2, 3") +}) + +# Empty ------------------------------------------------------------------- test_that("empty input returns empty list", { expect_equal(vec_recycle_common(), list()) From 76d72c1a1301ee2aacf08c319b600e872a0f00d9 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 10:58:47 -0400 Subject: [PATCH 08/16] Move `vec_size2()` to `shape.R` --- R/shape.R | 12 ++++++++++++ R/size.R | 13 ------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/R/shape.R b/R/shape.R index 295eee2f9..53da8abe1 100644 --- a/R/shape.R +++ b/R/shape.R @@ -21,6 +21,18 @@ shape_common <- function(x, y) { map2_int(shape$x, shape$y, vec_size2) } +vec_size2 <- function(nx, ny) { + if (nx == ny) { + nx + } else if (nx == 1L) { + ny + } else if (ny == 1L) { + nx + } else { + abort(paste0("Incompatible lengths: ", nx, ", ", ny, ".")) + } +} + shape_broadcast <- function(x, to) { if (is.null(x) || is.null(to)) { return(x) diff --git a/R/size.R b/R/size.R index fa10f128d..ce1015b4d 100644 --- a/R/size.R +++ b/R/size.R @@ -77,19 +77,6 @@ vec_size_common <- function(..., .size = NULL, .absent = 0L) { .External2(vctrs_size_common, .size, .absent) } -vec_size2 <- function(nx, ny) { - if (nx == ny) { - nx - } else if (nx == 1L) { - ny - } else if (ny == 1L) { - nx - } else { - abort(paste0("Incompatible lengths: ", nx, ", ", ny, ".")) - } -} - - #' @rdname vec_size #' @export vec_is_empty <- function(x) { From c59894a25d8010650daa743705b83c11309b18b4 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 10:59:15 -0400 Subject: [PATCH 09/16] Rename `vec_size2()` to `shape_size2()` --- R/shape.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/shape.R b/R/shape.R index 53da8abe1..b8e3c95f6 100644 --- a/R/shape.R +++ b/R/shape.R @@ -18,10 +18,10 @@ shape_match <- function(type, x, y) { shape_common <- function(x, y) { shape <- n_dim2(shape(x), shape(y)) - map2_int(shape$x, shape$y, vec_size2) + map2_int(shape$x, shape$y, shape_size2) } -vec_size2 <- function(nx, ny) { +shape_size2 <- function(nx, ny) { if (nx == ny) { nx } else if (nx == 1L) { From 1d0a40315f6d14abd8b8dde76879c5c8e7cea50d Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 11:10:06 -0400 Subject: [PATCH 10/16] Update `type-size` vignette's use of recycling to size 0. --- vignettes/type-size.Rmd | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/vignettes/type-size.Rmd b/vignettes/type-size.Rmd index 53eecef3b..74fe58edc 100644 --- a/vignettes/type-size.Rmd +++ b/vignettes/type-size.Rmd @@ -323,15 +323,10 @@ Closely related to the definition of size are the __recycling rules__. The recyc ```{r} vec_size_common(1:3, 1:3, 1:3) vec_size_common(1:10, 1) -vec_size_common(integer(), 1:3) +vec_size_common(integer(), 1) ``` -vctrs obeys a stricter set of recycling rules than base R, only recycling under two circumstances: - -* Vectors of size 1 can be recycled to any size. -* Vectors of any size can be recycled to size 0. - -All other size combinations will generate an error. This strictness prevents common mistakes like `dest == c("IAH", "HOU"))`, at the cost of occasionally requiring an explicit calls to `rep()`. +vctrs obeys a stricter set of recycling rules than base R. Vectors of size 1 are recycled to any other size. All other size combinations will generate an error. This strictness prevents common mistakes like `dest == c("IAH", "HOU"))`, at the cost of occasionally requiring an explicit calls to `rep()`. ```{r, echo = FALSE, fig.cap="Summary of vctrs recycling rules. X indicates n error"} knitr::include_graphics("../man/figures/sizes-recycling.png", dpi = 300) @@ -344,7 +339,6 @@ You can apply the recycling rules in two ways: ```{r} vec_recycle(1:3, 3) vec_recycle(1, 10) - vec_recycle(1:3, 0) ``` * If you have multiple vectors and you want to recycle them to the same @@ -353,7 +347,6 @@ You can apply the recycling rules in two ways: ```{r} vec_recycle_common(1:3, 1:3) vec_recycle_common(1:10, 1) - vec_recycle_common(integer(), 1:3) ``` ## Appendix: recycling in base R From 1b39d382c7f12aa29f410c45d6f973a995b23b43 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 11:14:21 -0400 Subject: [PATCH 11/16] Update `vec_recycle_common()` documentation --- R/recycle.R | 4 +--- man/vec_recycle.Rd | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/R/recycle.R b/R/recycle.R index 62f71697c..07b87f174 100644 --- a/R/recycle.R +++ b/R/recycle.R @@ -27,13 +27,11 @@ #' @examples #' # Inputs with 1 observation are recycled #' vec_recycle_common(1:5, 5) +#' vec_recycle_common(integer(), 5) #' \dontrun{ #' vec_recycle_common(1:5, 1:2) #' } #' -#' # Inputs with 0 observations -#' vec_recycle_common(1:5, integer()) -#' #' # Data frames and matrices are recycled along their rows #' vec_recycle_common(data.frame(x = 1), 1:5) #' vec_recycle_common(array(1:2, c(1, 2)), 1:5) diff --git a/man/vec_recycle.Rd b/man/vec_recycle.Rd index 89036b07f..c9d143f45 100644 --- a/man/vec_recycle.Rd +++ b/man/vec_recycle.Rd @@ -41,13 +41,11 @@ recycled to be the same length. \examples{ # Inputs with 1 observation are recycled vec_recycle_common(1:5, 5) +vec_recycle_common(integer(), 5) \dontrun{ vec_recycle_common(1:5, 1:2) } -# Inputs with 0 observations -vec_recycle_common(1:5, integer()) - # Data frames and matrices are recycled along their rows vec_recycle_common(data.frame(x = 1), 1:5) vec_recycle_common(array(1:2, c(1, 2)), 1:5) From d234cfeac8007b4951a4fcd04064878e3cff6ce3 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 11:17:20 -0400 Subject: [PATCH 12/16] Update `vec_size_common()` example --- R/size.R | 2 +- man/vec_size.Rd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/size.R b/R/size.R index ce1015b4d..934b93222 100644 --- a/R/size.R +++ b/R/size.R @@ -66,7 +66,7 @@ #' #' vec_size_common(1:10, 1:10) #' vec_size_common(1:10, 1) -#' vec_size_common(1:10, integer()) +#' vec_size_common(integer(), 1) vec_size <- function(x) { .Call(vctrs_size, x) } diff --git a/man/vec_size.Rd b/man/vec_size.Rd index 4d8a51d86..e5367fe8a 100644 --- a/man/vec_size.Rd +++ b/man/vec_size.Rd @@ -81,7 +81,7 @@ vec_size(array(dim = c(3, 5, 10))) vec_size_common(1:10, 1:10) vec_size_common(1:10, 1) -vec_size_common(1:10, integer()) +vec_size_common(integer(), 1) } \seealso{ \code{\link[=vec_slice]{vec_slice()}} for a variation of \code{[} compatible with \code{vec_size()}, From 01edae81dd1574bdbd71e3bb8ed2e4faae23c969 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Mon, 17 Jun 2019 12:12:48 -0400 Subject: [PATCH 13/16] Update `sizes-recycling.png` --- man/figures/sizes-recycling.png | Bin 14619 -> 13727 bytes man/figures/sizes.graffle | Bin 2985 -> 3969 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/man/figures/sizes-recycling.png b/man/figures/sizes-recycling.png index 7c7cc8520789326e520ba220f53dcec3f8e5e23b..35c185605659c5f2dd3dbf72bc3be73e7b1cfe99 100644 GIT binary patch literal 13727 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 literal 14619 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 D7!GJt diff --git a/man/figures/sizes.graffle b/man/figures/sizes.graffle index 054fd5d54690a450d4f8a52b8e7c093f8b24b39e..0b582e9f055bb0f7daaae461df21f3aa628befda 100644 GIT binary patch literal 3969 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 baPr9`pr!MYsllrL`Q85k2+*Wo{I>uA>M+#F literal 2985 zcmV;a3s&?WiwFP!000030PS7tbK1HR|J?o++JkO$qJff4{PM`9$=5vdbO0|BiaC_D2 z^$WC(QmKA(QaCYufBvCVS}vDG98eWiXBH58rCZmT6W3o|(Z)_GLs9d!6WYzX^_V#H zu4bzK`P(;V4`g+&sJ{7)T;UaQTee0X&q~2vT4~xo(TRHw&PvS9K0KMDGsB2h|{8&mfJ zzm(x5;c(PiZV(o+yx?9q;lb!O zGatoA3c7oJ@G;l9p}ckIt>`Fs+K9Lxgo0J8mo@#;Gjwn;rfHOn9$E60B?Vcr*v}ti8Y>r@zgfyRW-2d5g!yH^ZUmWrBofu zaVhB^W0z=15XQPoh#eFr)`HM$NcHbAd7NXqE7NxL^!|8`U2W_?3L>EI5TfuxEty^r z;=_vsf(yrmB%BJ$|0rpN+{YEV&0iA($v7-3jwTnw@G=zYBu2}c2 z3rFEQl}@WyH!7Fy0cZePKOfn5AY`~7cKgAN$xKy@R;SgsZf-}jxi#WCigEv`zPT6D zgbb9hVzoMzPs_&0a5_~yc&I3A!fQ%c$HNVs>Fc*jvl%vK zRN5iK09Fij*0AZnC2rgRGJLc)t$(Ji-)Nt^#%T6v4VsNr$S@jetI_9*GvKv-x`z#cK3XcfGS>HHwX-XS3_4Nv zmD31QSFh~K{Z3d88NwTPO2u$SA+a?dHR(8-6C{9*wsxOGhKqUczSZh9hTpGOBM6!b zeT8qgrFXqfWuY{$mC2G`FRs@j(GQ-|tScJrM4={fuYa8=mtJMItWJ~`ZW{W>k6Xjv zS?qBy#On&UsR(bE53bH*)zgVhTvMekb*$2@2NK3=8B&2!ndgpa^+tuyzi{>Dg(4^L z90z!wz6&xGSWKR4Z4=nq#$xhgjmfi45fi8uc!8lhg=(ImnxXnvq8j`{R09U$Tp;Ec zh#82Fb!ko@SmG&GlSgPsX2)g!z~eH+{1!VdW5;FexQrc_9qVyf)|Xw0dm@X;GuAf9 z);1QC|H_zr_L~pEUrS8>ccPkOsAi}>T2yBpf+tWdND@PJ3e|w2nxXoL55XCTbAXr~ zCNU5n?b4j}BzPhSmjs6D6sjS65}cv>RXqvLP@MzS>^W(M>Q{9*#!#Ij0%wn*FjW6i zRKwqVIF>{;fDF|sRI>=2q57B)#~6rnfS3i`48%vfG-n--C9zs&&zPjQ(d@{Zq55c- z=B&dphUy%sX3v-~R39y>vku1?s&ho(>_1vER39y>vku2Heu$2tI*DqTp_-xkh!4jY zh;x8gVjyN9K2{KC9gayw0f_=c5|SaJ14StOg=L291hUyzR}9#%>fx~iKb_8iod7ob zI*S4ORXsn3iV}}t8Bml{sd)g(4A_~mIQx}BhU{1M3>jb`PG!$v-(WEiAM>dg!)zL} z|FDO*BiZ6&`TCl!sYPcgo`o-{O=Mf!Xq*Ok953<$HJvgI^W=T@wKeB8{^Gcq?7Q#% zK}H5W!&!O(S1Lc>sNPGZ@uX6~kPS-iz7Xf`O;eoXj&A)ZgG4 z$;fgQbW?z7@>}}RPtzx+ZZmh5sS+=r7aeR`0JZ;w`wja}QcE-^yHMN)A zjR%gYLMQ3L%Rw7p`7mm3dKJg_o!K>ZBgsRfDdM(GPb~-gaZGQ@JdERa@2}Q9TsW@z z-LbJnhv)ulU99W8L@867?QOOlGw9smJOhL@Ha{3N2HwFmItm|WahO7K&Nb)nx! zmtXIPH$Z6(>q_q{rD;4`%WCs^@vq3#|6kM-xRmGG&oGr^P)qX#wcOI6(Ty!E8A7iw znNrgz8`ijrd@4a%IpyU#I#oDDJ_T}v1zNmXV6;S*hC Date: Thu, 27 Jun 2019 10:17:19 -0400 Subject: [PATCH 14/16] Remove 0 row/col from `sizes-recycling.png` --- man/figures/sizes-recycling.png | Bin 13727 -> 8275 bytes man/figures/sizes.graffle | Bin 3969 -> 3416 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/man/figures/sizes-recycling.png b/man/figures/sizes-recycling.png index 35c185605659c5f2dd3dbf72bc3be73e7b1cfe99..981f52338ce996f87127c8cd9094241df74198e8 100644 GIT binary patch literal 8275 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 diff --git a/man/figures/sizes.graffle b/man/figures/sizes.graffle index 0b582e9f055bb0f7daaae461df21f3aa628befda..a78239b8d428fa73e74a7872bcf3538fafef43ff 100644 GIT binary patch literal 3416 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 baPr9`pr!MYsllrL`Q85k2+*Wo{I>uA>M+#F From db1c1e1bda4465b7b3813d172190a3d21f9ebc27 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Thu, 27 Jun 2019 10:27:21 -0400 Subject: [PATCH 15/16] Actually link to `sizes-recycling.png` in `vec_recycle()` --- R/recycle.R | 2 ++ man/vec_recycle.Rd | 2 ++ 2 files changed, 4 insertions(+) diff --git a/R/recycle.R b/R/recycle.R index 07b87f174..05d648a40 100644 --- a/R/recycle.R +++ b/R/recycle.R @@ -10,6 +10,8 @@ #' The common size of two vectors defines the recycling rules, and can be #' summarise with the following table: #' +#' \figure{sizes-recycling.png} +#' #' (Note `NULL`s are handled specially; they are treated like empty #' arguments and hence don't affect the size) #' diff --git a/man/vec_recycle.Rd b/man/vec_recycle.Rd index c9d143f45..8738f1c9b 100644 --- a/man/vec_recycle.Rd +++ b/man/vec_recycle.Rd @@ -27,6 +27,8 @@ precise definition of size. The common size of two vectors defines the recycling rules, and can be summarise with the following table: +\figure{sizes-recycling.png} + (Note \code{NULL}s are handled specially; they are treated like empty arguments and hence don't affect the size) From d37935006c0711d3132e91b2781295501ef49f63 Mon Sep 17 00:00:00 2001 From: DavisVaughan Date: Thu, 27 Jun 2019 10:29:06 -0400 Subject: [PATCH 16/16] Rename `shape_size2()` to `axis2()` --- R/shape.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/shape.R b/R/shape.R index b8e3c95f6..06c3deff8 100644 --- a/R/shape.R +++ b/R/shape.R @@ -18,10 +18,10 @@ shape_match <- function(type, x, y) { shape_common <- function(x, y) { shape <- n_dim2(shape(x), shape(y)) - map2_int(shape$x, shape$y, shape_size2) + map2_int(shape$x, shape$y, axis2) } -shape_size2 <- function(nx, ny) { +axis2 <- function(nx, ny) { if (nx == ny) { nx } else if (nx == 1L) {