R Under development (unstable) (2025-11-14 r89021 ucrt) -- "Unsuffered Consequences" Copyright (C) 2025 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # This file is part of the standard setup for testthat. > # It is recommended that you do not modify it. > # > # Where should you do additional test configuration? > # Learn more about the roles of various files in: > # * https://r-pkgs.org/testing-design.html#sec-tests-files-overview > # * https://testthat.r-lib.org/articles/special-files.html > > library(testthat) > library(fjoin) > > test_check("fjoin") id c R.c 1: 2 row A2 row B7 2: 2 row A3 row B7 3: 3 row A4 row B5 4: 3 row A4 row B6 id c.x c.y 1: 2 row A2 row B7 2: 2 row A3 row B7 3: 3 row A4 row B5 4: 3 row A4 row B6 id c R.c 1: 2 row A2 row B7 2: 2 row A3 row B7 3: 3 row A4 row B5 4: 3 row A4 row B6 5: NA row A5 row B1 6: NA row A5 row B2 7: NA row A6 row B1 8: NA row A6 row B2 id c.x c.y 1: 2 row A2 row B7 2: 2 row A3 row B7 3: 3 row A4 row B5 4: 3 row A4 row B6 5: NA row A5 row B1 6: NA row A5 row B2 7: NA row A6 row B1 8: NA row A6 row B2 id c R.c 1: 3 row A4 row B5 2: 3 row A4 row B6 3: 2 row A2 row B7 4: 2 row A3 row B7 id c.x c.y 1: 3 row A4 row B5 2: 3 row A4 row B6 3: 2 row A2 row B7 4: 2 row A3 row B7 id c R.c 1: 1 row A1 2: 2 row A2 row B7 3: 2 row A3 row B7 4: 3 row A4 row B5 5: 3 row A4 row B6 6: NA row A5 7: NA row A6 id c.x c.y 1: 1 row A1 2: 2 row A2 row B7 3: 2 row A3 row B7 4: 3 row A4 row B5 5: 3 row A4 row B6 6: NA row A5 7: NA row A6 id c R.c 1: 1 row A1 2: 2 row A2 row B7 3: 2 row A3 row B7 4: 3 row A4 row B5 5: 3 row A4 row B6 6: NA row A5 row B1 7: NA row A5 row B2 8: NA row A6 row B1 9: NA row A6 row B2 id c.x c.y 1: 1 row A1 2: 2 row A2 row B7 3: 2 row A3 row B7 4: 3 row A4 row B5 5: 3 row A4 row B6 6: NA row A5 row B1 7: NA row A5 row B2 8: NA row A6 row B1 9: NA row A6 row B2 id c R.c 1: 3 row A4 row B5 2: 3 row A4 row B6 3: 2 row A2 row B7 4: 2 row A3 row B7 5: 1 row A1 6: NA row A5 7: NA row A6 id c.x c.y 1: 3 row A4 row B5 2: 3 row A4 row B6 3: 2 row A2 row B7 4: 2 row A3 row B7 5: 1 row A1 6: NA row A5 7: NA row A6 id c R.c 1: 2 row A2 row B7 2: 2 row A3 row B7 3: 3 row A4 row B5 4: 3 row A4 row B6 5: NA row B1 6: NA row B2 7: 4 row B3 8: 4 row B4 id c.x c.y 1: 2 row A2 row B7 2: 2 row A3 row B7 3: 3 row A4 row B5 4: 3 row A4 row B6 5: NA row B1 6: NA row B2 7: 4 row B3 8: 4 row B4 id c R.c 1: 2 row A2 row B7 2: 2 row A3 row B7 3: 3 row A4 row B5 4: 3 row A4 row B6 5: NA row A5 row B1 6: NA row A5 row B2 7: NA row A6 row B1 8: NA row A6 row B2 9: 4 row B3 10: 4 row B4 id c.x c.y 1: 2 row A2 row B7 2: 2 row A3 row B7 3: 3 row A4 row B5 4: 3 row A4 row B6 5: NA row A5 row B1 6: NA row A5 row B2 7: NA row A6 row B1 8: NA row A6 row B2 9: 4 row B3 10: 4 row B4 id c R.c 1: NA row B1 2: NA row B2 3: 4 row B3 4: 4 row B4 5: 3 row A4 row B5 6: 3 row A4 row B6 7: 2 row A2 row B7 8: 2 row A3 row B7 id c.x c.y 1: NA row B1 2: NA row B2 3: 4 row B3 4: 4 row B4 5: 3 row A4 row B5 6: 3 row A4 row B6 7: 2 row A2 row B7 8: 2 row A3 row B7 id c R.c 1: 1 row A1 2: 2 row A2 row B7 3: 2 row A3 row B7 4: 3 row A4 row B5 5: 3 row A4 row B6 6: NA row A5 7: NA row A6 8: NA row B1 9: NA row B2 10: 4 row B3 11: 4 row B4 id c.x c.y 1: 1 row A1 2: 2 row A2 row B7 3: 2 row A3 row B7 4: 3 row A4 row B5 5: 3 row A4 row B6 6: NA row A5 7: NA row A6 8: NA row B1 9: NA row B2 10: 4 row B3 11: 4 row B4 id c R.c 1: 1 row A1 2: 2 row A2 row B7 3: 2 row A3 row B7 4: 3 row A4 row B5 5: 3 row A4 row B6 6: NA row A5 row B1 7: NA row A5 row B2 8: NA row A6 row B1 9: NA row A6 row B2 10: 4 row B3 11: 4 row B4 id c.x c.y 1: 1 row A1 2: 2 row A2 row B7 3: 2 row A3 row B7 4: 3 row A4 row B5 5: 3 row A4 row B6 6: NA row A5 row B1 7: NA row A5 row B2 8: NA row A6 row B1 9: NA row A6 row B2 10: 4 row B3 11: 4 row B4 id c R.c 1: NA row B1 2: NA row B2 3: 4 row B3 4: 4 row B4 5: 3 row A4 row B5 6: 3 row A4 row B6 7: 2 row A2 row B7 8: 2 row A3 row B7 9: 1 row A1 10: NA row A5 11: NA row A6 id c.x c.y 1: NA row B1 2: NA row B2 3: 4 row B3 4: 4 row B4 5: 3 row A4 row B5 6: 3 row A4 row B6 7: 2 row A2 row B7 8: 2 row A3 row B7 9: 1 row A1 10: NA row A5 11: NA row A6 id c R.id R.c 1: 1 row A1 NA row B1 2: 1 row A1 NA row B2 3: 1 row A1 4 row B3 4: 1 row A1 4 row B4 5: 1 row A1 3 row B5 6: 1 row A1 3 row B6 7: 1 row A1 2 row B7 8: 2 row A2 NA row B1 9: 2 row A2 NA row B2 10: 2 row A2 4 row B3 11: 2 row A2 4 row B4 12: 2 row A2 3 row B5 13: 2 row A2 3 row B6 14: 2 row A2 2 row B7 15: 2 row A3 NA row B1 16: 2 row A3 NA row B2 17: 2 row A3 4 row B3 18: 2 row A3 4 row B4 19: 2 row A3 3 row B5 20: 2 row A3 3 row B6 21: 2 row A3 2 row B7 22: 3 row A4 NA row B1 23: 3 row A4 NA row B2 24: 3 row A4 4 row B3 25: 3 row A4 4 row B4 26: 3 row A4 3 row B5 27: 3 row A4 3 row B6 28: 3 row A4 2 row B7 29: NA row A5 NA row B1 30: NA row A5 NA row B2 31: NA row A5 4 row B3 32: NA row A5 4 row B4 33: NA row A5 3 row B5 34: NA row A5 3 row B6 35: NA row A5 2 row B7 36: NA row A6 NA row B1 37: NA row A6 NA row B2 38: NA row A6 4 row B3 39: NA row A6 4 row B4 40: NA row A6 3 row B5 41: NA row A6 3 row B6 42: NA row A6 2 row B7 id c R.id R.c id.x c.x id.y c.y 1: 1 row A1 NA row B1 2: 1 row A1 NA row B2 3: 1 row A1 4 row B3 4: 1 row A1 4 row B4 5: 1 row A1 3 row B5 6: 1 row A1 3 row B6 7: 1 row A1 2 row B7 8: 2 row A2 NA row B1 9: 2 row A2 NA row B2 10: 2 row A2 4 row B3 11: 2 row A2 4 row B4 12: 2 row A2 3 row B5 13: 2 row A2 3 row B6 14: 2 row A2 2 row B7 15: 2 row A3 NA row B1 16: 2 row A3 NA row B2 17: 2 row A3 4 row B3 18: 2 row A3 4 row B4 19: 2 row A3 3 row B5 20: 2 row A3 3 row B6 21: 2 row A3 2 row B7 22: 3 row A4 NA row B1 23: 3 row A4 NA row B2 24: 3 row A4 4 row B3 25: 3 row A4 4 row B4 26: 3 row A4 3 row B5 27: 3 row A4 3 row B6 28: 3 row A4 2 row B7 29: NA row A5 NA row B1 30: NA row A5 NA row B2 31: NA row A5 4 row B3 32: NA row A5 4 row B4 33: NA row A5 3 row B5 34: NA row A5 3 row B6 35: NA row A5 2 row B7 36: NA row A6 NA row B1 37: NA row A6 NA row B2 38: NA row A6 4 row B3 39: NA row A6 4 row B4 40: NA row A6 3 row B5 41: NA row A6 3 row B6 42: NA row A6 2 row B7 id.x c.x id.y c.y id c R.id R.c 1: 1 row A1 NA row B1 2: 2 row A2 NA row B1 3: 2 row A3 NA row B1 4: 3 row A4 NA row B1 5: NA row A5 NA row B1 6: NA row A6 NA row B1 7: 1 row A1 NA row B2 8: 2 row A2 NA row B2 9: 2 row A3 NA row B2 10: 3 row A4 NA row B2 11: NA row A5 NA row B2 12: NA row A6 NA row B2 13: 1 row A1 4 row B3 14: 2 row A2 4 row B3 15: 2 row A3 4 row B3 16: 3 row A4 4 row B3 17: NA row A5 4 row B3 18: NA row A6 4 row B3 19: 1 row A1 4 row B4 20: 2 row A2 4 row B4 21: 2 row A3 4 row B4 22: 3 row A4 4 row B4 23: NA row A5 4 row B4 24: NA row A6 4 row B4 25: 1 row A1 3 row B5 26: 2 row A2 3 row B5 27: 2 row A3 3 row B5 28: 3 row A4 3 row B5 29: NA row A5 3 row B5 30: NA row A6 3 row B5 31: 1 row A1 3 row B6 32: 2 row A2 3 row B6 33: 2 row A3 3 row B6 34: 3 row A4 3 row B6 35: NA row A5 3 row B6 36: NA row A6 3 row B6 37: 1 row A1 2 row B7 38: 2 row A2 2 row B7 39: 2 row A3 2 row B7 40: 3 row A4 2 row B7 41: NA row A5 2 row B7 42: NA row A6 2 row B7 id c R.id R.c id.x c.x id.y c.y 1: 1 row A1 NA row B1 2: 2 row A2 NA row B1 3: 2 row A3 NA row B1 4: 3 row A4 NA row B1 5: NA row A5 NA row B1 6: NA row A6 NA row B1 7: 1 row A1 NA row B2 8: 2 row A2 NA row B2 9: 2 row A3 NA row B2 10: 3 row A4 NA row B2 11: NA row A5 NA row B2 12: NA row A6 NA row B2 13: 1 row A1 4 row B3 14: 2 row A2 4 row B3 15: 2 row A3 4 row B3 16: 3 row A4 4 row B3 17: NA row A5 4 row B3 18: NA row A6 4 row B3 19: 1 row A1 4 row B4 20: 2 row A2 4 row B4 21: 2 row A3 4 row B4 22: 3 row A4 4 row B4 23: NA row A5 4 row B4 24: NA row A6 4 row B4 25: 1 row A1 3 row B5 26: 2 row A2 3 row B5 27: 2 row A3 3 row B5 28: 3 row A4 3 row B5 29: NA row A5 3 row B5 30: NA row A6 3 row B5 31: 1 row A1 3 row B6 32: 2 row A2 3 row B6 33: 2 row A3 3 row B6 34: 3 row A4 3 row B6 35: NA row A5 3 row B6 36: NA row A6 3 row B6 37: 1 row A1 2 row B7 38: 2 row A2 2 row B7 39: 2 row A3 2 row B7 40: 3 row A4 2 row B7 41: NA row A5 2 row B7 42: NA row A6 2 row B7 id.x c.x id.y c.y id c 1: 2 row A2 2: 2 row A3 3: 3 row A4 Index: id c 1: 2 row A2 2: 2 row A3 3: 3 row A4 id c 1: 2 row A2 2: 2 row A3 3: 3 row A4 4: NA row A5 5: NA row A6 Index: id c 1: 2 row A2 2: 2 row A3 3: 3 row A4 4: NA row A5 5: NA row A6 id c id2 1: 2 row A2 2 2: 2 row A3 2 3: 3 row A4 3 Index: id c id2 1: 2 row A2 2 2: 2 row A3 2 3: 3 row A4 3 id c id2 1: 2 row A2 2 2: 2 row A3 2 3: 3 row A4 3 4: NA row A5 NA 5: NA row A6 NA Index: id c id2 1: 2 row A2 2 2: 2 row A3 2 3: 3 row A4 3 4: NA row A5 NA 5: NA row A6 NA id c 1: 3 row B5 2: 3 row B6 3: 2 row B7 id c 1: 3 row B5 2: 3 row B6 3: 2 row B7 id c 1: NA row B1 2: NA row B2 3: 3 row B5 4: 3 row B6 5: 2 row B7 Index: id c 1: NA row B1 2: NA row B2 3: 3 row B5 4: 3 row B6 5: 2 row B7 id c id2 1: 3 row B5 3 2: 3 row B6 3 3: 2 row B7 2 Index: id c id2 1: 3 row B5 3 2: 3 row B6 3 3: 2 row B7 2 id c id2 1: NA row B1 NA 2: NA row B2 NA 3: 3 row B5 3 4: 3 row B6 3 5: 2 row B7 2 Index: id c id2 1: NA row B1 NA 2: NA row B2 NA 3: 3 row B5 3 4: 3 row B6 3 5: 2 row B7 2 id c 1: 1 row A1 2: NA row A5 3: NA row A6 Index: id c 1: 1 row A1 2: NA row A5 3: NA row A6 id c 1: 1 row A1 Index: id c 1: 1 row A1 id c id2 1: 1 row A1 1 2: NA row A5 NA 3: NA row A6 NA Index: id c id2 1: 1 row A1 1 2: NA row A5 NA 3: NA row A6 NA id c id2 1: 1 row A1 1 Index: id c id2 1: 1 row A1 1 id c 1: NA row B1 2: NA row B2 3: 4 row B3 4: 4 row B4 Index: id c 1: NA row B1 2: NA row B2 3: 4 row B3 4: 4 row B4 id c 1: 4 row B3 2: 4 row B4 Index: id c 1: 4 row B3 2: 4 row B4 id c id2 1: NA row B1 NA 2: NA row B2 NA 3: 4 row B3 4 4: 4 row B4 4 Index: id c id2 1: NA row B1 NA 2: NA row B2 NA 3: 4 row B3 4 4: 4 row B4 4 id c id2 1: 4 row B3 4 2: 4 row B4 4 Index: id c id2 1: 4 row B3 4 2: 4 row B4 4 id_A t_A c v_A 1 NA row A8 0 2 NA row A9 0 id_A t_A c v_A 1 NA row A8 0 2 NA row A9 0 id_A t_A c v_A 1 a 1 row A2 0 2 b 1 row A5 0 3 b 2 row A6 0 4 NA row A8 0 5 NA row A9 0 id_A t_A c v_A 1 a 1 row A2 0 2 b 1 row A5 0 3 b 2 row A6 0 4 NA row A8 0 5 NA row A9 0 id_A t_A c v_A 1 a 1 row A2 0 2 b 5 row A4 0 3 b 1 row A5 0 4 b 2 row A6 0 5 a 3 row A7 0 6 NA row A8 0 7 NA row A9 0 id_A t_A c v_A 1 a 1 row A2 0 2 b 5 row A4 0 3 b 1 row A5 0 4 b 2 row A6 0 5 a 3 row A7 0 6 NA row A8 0 7 NA row A9 0 id_A t_A c v_A 1 NA row A8 0 2 NA row A9 0 id_A t_A c v_A 1 NA row A8 0 2 NA row A9 0 id_A c 1 row A8 2 row A9 id_A c 1 row A8 2 row A9 id_A t_A c 1 a 1 row A2 2 b 1 row A5 3 b 2 row A6 4 NA row A8 5 NA row A9 id_A t_A c 1 a 1 row A2 2 b 1 row A5 3 b 2 row A6 4 NA row A8 5 NA row A9 id_A c 1 a row A2 2 b row A4 3 b row A5 4 b row A6 5 a row A7 6 row A8 7 row A9 id_A c 1 a row A2 2 b row A4 3 b row A5 4 b row A6 5 a row A7 6 row A8 7 row A9 id_A c 1 row A8 2 row A9 id_A c 1 row A8 2 row A9 .DT : y = DF_B (cast as data.table) .i : x = DF_A (cast as data.table) Join: na.omit(.DT, cols = "id_B")[.i, on = "id_B == id_A", data.frame(id_A, t_A, c = i.c, v_A, t_B, R.c = c, v_B), allow.cartesian = TRUE] .DT : x = DF_A (cast as data.table) .i : y = DF_B (cast as data.table) Join: setDF(na.omit(.DT, cols = "id_A")[id_A %chin% .i$id_B])[] .DT : x = DF_A (cast as data.table) .i : y = DF_B (cast as data.table) Join: setDF(.DT[!id_A %chin% .i[, na.omit(.SD), .SDcols = "id_B"]$id_B])[] .DT : y = DF_B (cast as data.table) .i : x = DF_A (cast as data.table) Join: setDF(.DT[id_B %chin% .i[, na.omit(.SD), .SDcols = "id_A"]$id_A])[] .DT : y = DF_B (cast as data.table) .i : x = DF_A (cast as data.table) Join: setDF(.DT[!id_B %chin% .i[, na.omit(.SD), .SDcols = "id_A"]$id_A])[] .DT : y = DF_B (cast as data.table) .i : x = DF_A (cast as data.table) Join: .DT[, fjoin.ind := TRUE][.i[, fjoin.ind := TRUE], on = "fjoin.ind", allow.cartesian = TRUE, data.frame(id_A, t_A, c = i.c, v_A, id_B, t_B, R.c = c, v_B)] .DT : DT_A .i : DT_B Join: with(list(fjoin.temp = setDT(setDT(na.omit(.i[, fjoin.which.i := .I], cols = "id_B")[.DT[, fjoin.which.DT := .I], on = "id_B == id_A", nomatch = NULL, mult = "first", data.frame(id_A = i.id_A, t_A = i.t_A, c = i.c, v_A = i.v_A, k3 = i.k3, k2 = i.k2, k1 = i.k1, fjoin.which.DT = i.fjoin.which.DT, fjoin.ind.DT = TRUE, fjoin.which.i)])[.i, on = "fjoin.which.i", data.frame(.join = fifelse(is.na(fjoin.ind.DT), 2L, 3L), id_A = id_B, t_A, c, v_A, k3, k2, k1, fjoin.which.DT, t_B, i.c = i.c, v_B, i.k2 = i.k2)])), rbind(fjoin.temp, setDT(.DT[!fjoin.temp$fjoin.which.DT, data.frame(id_A, t_A, c, v_A, k3, k2, k1, fjoin.which.DT, .join = rep(1L, .N))]), fill = TRUE))[, fjoin.which.DT := NULL][] .DT : DT_A .i : DT_B Join: .DT[!.i[, na.omit(.SD), .SDcols = "id_B"][.DT[, fjoin.which.DT := .I], on = "id_B == id_A", nomatch = NULL, mult = "first", fjoin.which.DT]][, fjoin.which.DT := NULL][] .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "id")[.i, on = "id", data.frame(id, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "id")[.i, on = "id", data.frame(id, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: na.omit(.DT, cols = "id")[id %in% .i$id] .DT : (unnamed) .i : (unnamed) Join: na.omit(.DT, cols = "id")[id %in% .i$id] .DT : (unnamed) .i : (unnamed) Join: .DT[!id %in% .i[, na.omit(.SD), .SDcols = "id"]$id] .DT : (unnamed) .i : (unnamed) Join: .DT[!id %in% .i[, na.omit(.SD), .SDcols = "id"]$id] .DT : (unnamed) .i : (unnamed) Join: setDT(.DT[, fjoin.ind := TRUE][.i[, fjoin.ind := TRUE], on = "fjoin.ind", allow.cartesian = TRUE, data.frame(id, col_DT, col_c, i.id = i.id, col_i, i.col_c = i.col_c)]) .DT : (unnamed) .i : (unnamed) Join: setDT(.DT[, fjoin.ind := TRUE][.i[, fjoin.ind := TRUE], on = "fjoin.ind", allow.cartesian = TRUE, data.frame(id, col_DT, col_c, i.id = i.id, col_i, i.col_c = i.col_c)]) .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "fjoin_blah")[.i, on = "fjoin_blah", data.frame(fjoin_blah, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "blah_fjoin.")[.i, on = "blah_fjoin.", data.frame(blah_fjoin., col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: setDT(.DT[.i, on = "id", data.frame(id, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "id")[.i, on = "id", data.frame(id, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "id")[.i, on = "id", nomatch = NULL, data.frame(id, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "id")[.i, on = "id", data.frame(id, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "id")[.i, on = "id", nomatch = NULL, data.frame(id, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] .DT : (unnamed) .i : (unnamed) Join: setDT(na.omit(.DT, cols = "id")[.i, on = "id", nomatch = NULL, data.frame(id, col_DT, col_c, col_i, i.col_c = i.col_c), allow.cartesian = TRUE])[] [ FAIL 0 | WARN 0 | SKIP 0 | PASS 429 ] > > proc.time() user system elapsed 8.64 1.29 10.01