Improvements to setdiff
This commit is contained in:
parent
eba8705d9e
commit
6b1a1910e3
3 changed files with 26 additions and 4 deletions
|
|
@ -34,6 +34,7 @@ export(randdir)
|
||||||
export(repmat)
|
export(repmat)
|
||||||
export(rivinSisaltamienMjonojenLkm)
|
export(rivinSisaltamienMjonojenLkm)
|
||||||
export(selvitaDigitFormat)
|
export(selvitaDigitFormat)
|
||||||
|
export(setdiff_MATLAB)
|
||||||
export(simulateAllFreqs)
|
export(simulateAllFreqs)
|
||||||
export(simulateIndividuals)
|
export(simulateIndividuals)
|
||||||
export(simuloiAlleeli)
|
export(simuloiAlleeli)
|
||||||
|
|
|
||||||
10
R/setdiff.R
10
R/setdiff.R
|
|
@ -6,8 +6,12 @@
|
||||||
#' @return
|
#' @return
|
||||||
#' @author Waldir Leoncio
|
#' @author Waldir Leoncio
|
||||||
#' @export
|
#' @export
|
||||||
setdiff <- function(A, B, legacy = FALSE) {
|
setdiff_MATLAB <- function(A, B, legacy = FALSE) {
|
||||||
values <- sort(unique(A[is.na(match(A, B))]))
|
if (is(A, "numeric") & is(B, "numeric")) {
|
||||||
# browser() # TEMP
|
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")
|
||||||
|
}
|
||||||
|
# TODO: add support for indices (if necessary)
|
||||||
return(values)
|
return(values)
|
||||||
}
|
}
|
||||||
|
|
@ -222,6 +222,23 @@ test_that("nargin works correctly", {
|
||||||
test_that("setdiff works as expected", {
|
test_that("setdiff works as expected", {
|
||||||
A <- c(3, 6, 2, 1, 5, 1, 1)
|
A <- c(3, 6, 2, 1, 5, 1, 1)
|
||||||
B <- c(2, 4, 6)
|
B <- c(2, 4, 6)
|
||||||
expect_equal(setdiff(A, B), list(c(1, 3, 5), 4, 1, 5))
|
C <- c(1, 3, 5)
|
||||||
|
expect_equal(setdiff(A, B), C)
|
||||||
|
A <- data.frame(
|
||||||
|
Var1 = 1:5,
|
||||||
|
Var2 = LETTERS[1:5],
|
||||||
|
Var3 = c(FALSE, TRUE, FALSE, TRUE, FALSE)
|
||||||
|
)
|
||||||
|
B <- data.frame(
|
||||||
|
Var1 = seq(1, 9, by = 2),
|
||||||
|
Var2 = LETTERS[seq(1, 9, by = 2)],
|
||||||
|
Var3 = rep(FALSE, 5)
|
||||||
|
)
|
||||||
|
C <- data.frame(
|
||||||
|
Var1 = c(2, 4),
|
||||||
|
Var2 = c('B', 'D'),
|
||||||
|
Var3 = c(TRUE, TRUE)
|
||||||
|
)
|
||||||
|
expect_equal(setdiff(A, B), C)
|
||||||
# TODO: add more examples from https://se.mathworks.com/help/matlab/ref/double.setdiff.html;jsessionid=0d8d42582d4d299b8224403899f1
|
# TODO: add more examples from https://se.mathworks.com/help/matlab/ref/double.setdiff.html;jsessionid=0d8d42582d4d299b8224403899f1
|
||||||
})
|
})
|
||||||
Loading…
Add table
Reference in a new issue