From 5de85310deb3e3fb699188ff2f4c1696abd27fef Mon Sep 17 00:00:00 2001 From: David Blodgett Date: Fri, 24 Jan 2025 16:22:38 -0800 Subject: [PATCH] bug in sort_network when duplicated rows due to attributes fixes #52 --- DESCRIPTION | 4 ++-- NEWS.md | 5 +++++ R/make_index_ids.R | 8 +++++--- R/sort_network.R | 1 + tests/testthat/data/sort_network_dups.rds | Bin 0 -> 725 bytes tests/testthat/test_sort_network.R | 14 ++++++++++++++ 6 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 tests/testthat/data/sort_network_dups.rds diff --git a/DESCRIPTION b/DESCRIPTION index 74fedc4..14611e4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: hydroloom Title: Utilities to Weave Hydrologic Fabrics -Version: 1.1.0 +Version: 1.1.1 Authors@R: person(given = "David", family = "Blodgett", @@ -14,7 +14,7 @@ Suggests: testthat, nhdplusTools, future, lwgeom, future.apply, knitr, gifski, m License: CC0 Encoding: UTF-8 Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 Config/testthat/parallel: true Config/testthat/edition: 3 VignetteBuilder: knitr diff --git a/NEWS.md b/NEWS.md index b712e73..d299ec0 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,8 @@ +hydroloom 1.1.1 +========== + +- fix bug with sort_network when duplicate entries are in the extended attributes -- #52 + hydroloom 1.1.0 ========== diff --git a/R/make_index_ids.R b/R/make_index_ids.R index 02da202..61ab39a 100644 --- a/R/make_index_ids.R +++ b/R/make_index_ids.R @@ -53,6 +53,11 @@ make_index_ids.hy <- function(x, long_form = FALSE) { Run check_hy_graph to identify issues.") } + vars <- c("id", "toid") + if("downmain" %in% names(x)) vars <- c(vars, "downmain") + + x <- select(x, all_of(vars)) + x <- distinct(x) out_val <- get_outlet_value(x) @@ -66,9 +71,6 @@ make_index_ids.hy <- function(x, long_form = FALSE) { out_rename <- copy(out) setnames(out_rename, old = "indid", new = "toindid") - vars <- c("id", "toid") - if("downmain" %in% names(x)) vars <- c(vars, "downmain") - out <- merge(merge(as.data.table(x)[, vars, with = FALSE], out, by = "id", all.x = TRUE, sort = FALSE), out_rename, diff --git a/R/sort_network.R b/R/sort_network.R index d197f60..68e72b5 100644 --- a/R/sort_network.R +++ b/R/sort_network.R @@ -64,6 +64,7 @@ sort_network.data.frame <- function(x, split = FALSE, outlets = NULL) { #' @export #' sort_network.hy <- function(x, split = FALSE, outlets = NULL) { + hy_g <- get_hyg(x, add = TRUE, id = id) x <- select(st_drop_geometry(x), id, toid, everything()) diff --git a/tests/testthat/data/sort_network_dups.rds b/tests/testthat/data/sort_network_dups.rds new file mode 100644 index 0000000000000000000000000000000000000000..71fa17b42b6b715c6329b070636e0e9879085070 GIT binary patch literal 725 zcmV;`0xJCEO7sF%X_HEk zN`u;n_L3LkS$HF0t;AmEJ5Fo@+z`o$eX={>?9A+XJ{%cix~A9bm~KDZn*RCwHz$+8 zUWJEVxL$_qUAP;B-@)V6iA}RC87Z&|CJLN_RDs_HlcB1liH=a&)aeMwW;$i4Q{acl zW>y#HRK=@`^9t0c(|CBOjCBNLHDX=^ViBOR0(IS59g#JF%nqACqQGl_ z5&(^Qs(DFKQW{eS$JBMNM!m{<4YGp`RdGnAI%ajX7KMu`1vt8!KW%TRNF0ahU+#OW&HmW%{;oUS5n!bo%#ao0rxI|;@l@Gyag3G9U9Yx|7; zJ%u)!ZL-a(X;Vkdl@*WYKdZjFieUc#Rz)0EBOsX7ZdXCQ#g1vU7hCMk!${5Utl2SK zJ6F->tRiWSYE1@PkUGnUWU$rQxhKxM`X#hS&CL%QhUT|FU-s%4T8f%i7dk3!OActU z&{1i7#0Cm)ZnnN?In^<=zC6UQr>phQ5r_qufH;s8#0!c2b~&bOxZ@b8r>a%igr!!7 zSwqaCKdK%Z?~*uZd1yJcTshWDg7|o9jWLGmh@nTsoLa6N3gt>kpk)~`^{{eGl(W>I z%CWwa#O8YsNkBXzmXIJ9De{%F>JVo~53vdl%O2_;k$1EMEypawLyNUrRyb#k@`K`M z`1}XIFY+_)YxvU3nDdWyy!yW}7sosPd&)0zjt}Er8*_HHzTS?FnSL*R_xV$A>*84X z+CJ_5tIL>PCwx8IR89YG`f2`P)-RLZ26h&+&0TM`Ebj-i#h1lwep!O&pO=gLY1`u9 ze))J>Sk2Sd$z?+}zp3=~?ew9L?iMyzSGSk5o6S=3`RD{i+@ HhY|n)31Ddf literal 0 HcmV?d00001 diff --git a/tests/testthat/test_sort_network.R b/tests/testthat/test_sort_network.R index 3429499..9c366c4 100644 --- a/tests/testthat/test_sort_network.R +++ b/tests/testthat/test_sort_network.R @@ -217,3 +217,17 @@ test_that("add_topo_sort deals with diversions", { unique(base_network$topo_sort[base_network$id == 8317403])) }) + +test_that("duplicated attributes", { + network <- readRDS("data/sort_network_dups.rds") + + dedup <- dplyr::distinct(dplyr::select(network, id, toid)) + + sorted <- sort_network(network) + + sorted_dedup <- sort_network(dedup) + + sorted_dedup_2 <- dplyr::distinct(dplyr::select(sorted, id, toid)) + + expect_equal(sorted_dedup, sorted_dedup_2) +})