From d47b84fb5569a08776c711d6407dba907f2cebba Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Fri, 15 Jan 2021 08:59:48 +0100 Subject: [PATCH] Implemented dataframe parsing on setdiff --- R/setdiff_MATLAB.R | 11 ++++++++++- tests/testthat/test-convertedBaseFunctions.R | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/R/setdiff_MATLAB.R b/R/setdiff_MATLAB.R index 3c2324b..69742b9 100644 --- a/R/setdiff_MATLAB.R +++ b/R/setdiff_MATLAB.R @@ -9,7 +9,16 @@ setdiff_MATLAB <- function(A, B, legacy = FALSE) { if (is(A, "numeric") & is(B, "numeric")) { values <- sort(unique(A[is.na(match(A, B))])) } else if (is(A, "data.frame") & is(B, "data.frame")) { - stop("Not implemented for data frames") + C <- A + exclude_rows <- vector() + for (r1 in seq_len(nrow(A))) { + for (r2 in seq_len(nrow(B))) { + if (all(A[r1, ] == B[r2, ])) { + exclude_rows <- append(exclude_rows, r1) + } + } + } + values <- C[-exclude_rows, ] } # TODO: add support for indices (if necessary) return(values) diff --git a/tests/testthat/test-convertedBaseFunctions.R b/tests/testthat/test-convertedBaseFunctions.R index 8a58ac2..3dba86e 100644 --- a/tests/testthat/test-convertedBaseFunctions.R +++ b/tests/testthat/test-convertedBaseFunctions.R @@ -239,6 +239,7 @@ test_that("setdiff works as expected", { Var2 = c('B', 'D'), Var3 = c(TRUE, TRUE) ) + row.names(C) <- c(2L, 4L) expect_equal(setdiff_MATLAB(A, B), C) # TODO: implement for data frames # TODO: add more examples from https://se.mathworks.com/help/matlab/ref/double.setdiff.html;jsessionid=0d8d42582d4d299b8224403899f1 }) \ No newline at end of file