context("fmode")
# rm(list = ls())
set.seed(101)
x <- round(abs(10*rnorm(100)))
w <- as.integer(round(abs(10*rnorm(100)))) # round(abs(rnorm(100)), 1) -> Numeric precision issues in R
xNA <- x
wNA <- w
xNA[sample.int(100,20)] <- NA
wNA[sample.int(100,20)] <- NA
f <- as.factor(sample.int(10, 100, TRUE))
data <- wlddev[wlddev$iso3c %in% c("BLZ","IND","USA","SRB","GRL"), ]
l <- nrow(data)
g <- GRP(droplevels(data$iso3c))
gf <- as_factor_GRP(g)
dataNA <- na_insert(data)
m <- as.matrix(num_vars(data)) # without num_vars also works for ties = "first"
mNA <- as.matrix(num_vars(dataNA))
wdat <- as.integer(round(10*abs(rnorm(l)))) # round(abs(rnorm(l)), 1) -> Numeric precision issues in R
wdatNA <- wdat
wdatNA[sample.int(l, floor(l/5))] <- NA
ncv <- !char_vars(data, "logical")
getdata <- function(first) if(first) data else gv(data, ncv)
getdataNA <- function(first) if(first) dataNA else gv(dataNA, ncv)
# seteltNA <- function(x,i,j) {
# x[i,j] <- NA
# x
# }
whichmax <- function(x) which(as.integer(x) == as.integer(max(x))) # This solves numeric precision issues
minwa <- function(x) {
xna <- unattrib(x)
if(anyNA(xna)) {
if(is.integer(xna)) return(`attributes<-`(NA_integer_, attributes(x)))
# if(is.character(xna)) return(`attributes<-`(NA_character_, attributes(x)))
if(is.numeric(xna)) {
xna <- na_rm(xna)
if(!length(xna)) return(`attributes<-`(NA_real_, attributes(x)))
}
}
`attributes<-`(`storage.mode<-`(base::min(xna), storage.mode(x)), attributes(x))
}
maxwa <- function(x) {
xna <- unattrib(x)
if(is.numeric(xna) && anyNA(xna)) {
xna <- na_rm(xna)
if(!length(xna)) return(`attributes<-`(NA_real_, attributes(x)))
}
`attributes<-`(`storage.mode<-`(base::max(xna), storage.mode(x)), attributes(x))
}
if(identical(Sys.getenv("NCRAN"), "TRUE")) {
# This is to fool very silly checks on CRAN scanning the code of the tests
rowidv <- eval(parse(text = paste0("data.table", ":", ":", "rowidv")))
# firstmode <- function(x) {
# ox <- sort(x)
# ox[which.max(rowidv(ox))]
# }
unam <- function(x) `names<-`(x, NULL)
Mode <- function(x, na.rm = FALSE, ties = "first") {
if(na.rm) {
miss <- is.na(x)
if(all(miss)) return(x[1L])
x <- x[!miss]
}
o <- radixorder(x)
ox <- unam(x)[o]
switch(ties,
first = unam(x)[which.max(rowidv(ox)[radixorder(o)])],
last = unam(x)[which.max(rowidv(ox)[radixorder(o, decreasing = TRUE)])],
min = minwa(ox[whichmax(rowidv(ox))]),
max = maxwa(ox[whichmax(rowidv(ox))]),
stop("Unknown ties option"))
}
}
# Mode <- function(x, na.rm = FALSE, ties = "first") {
# if(na.rm) x <- x[!is.na(x)]
# ux <- unique(x)
# switch(ties,
# first = ux[which.max(tabulate(match(x, ux)))],
# min = minwa(ux[whichmax(tabulate(match(x, ux)))]),
# max = maxwa(ux[whichmax(tabulate(match(x, ux)))]),
# stop("Unknown ties option"))
# }
wMode <- function(x, w, na.rm = FALSE, ties = "first") {
ax <- attributes(x)
cc <- complete.cases(x, w)
if(!any(cc)) return(`storage.mode<-`(NA, storage.mode(x)))
if(na.rm) {
w <- w[cc]
x <- x[cc]
}
g <- GRP.default(x, call = FALSE)
switch(ties,
first = {
o <- radixorder(unlist(gsplit(seq_along(w), g), use.names = FALSE))
sw <- unlist(lapply(gsplit(w, g), base::cumsum), use.names = FALSE)[o]
fsubset.default(x, which.max(sw))
},
min = minwa(fsubset.default(g[["groups"]][[1L]], whichmax(fsum.default(w, g, use.g.names = FALSE)))),
max = maxwa(fsubset.default(g[["groups"]][[1L]], whichmax(fsum.default(w, g, use.g.names = FALSE)))),
stop("Unknown ties option"))
# storage.mode(res) <- storage.mode(x)
# `attributes<-`(res, ax)
}
for (nth in 1:2) {
if(nth == 2L) {
if(Sys.getenv("OMP") == "TRUE") {
fmode <- function(x, ...) collapse::fmode(x, ..., nthreads = 2L)
} else break
}
if(identical(Sys.getenv("NCRAN"), "TRUE")) {
test_that("fmode performs like Mode (defined above)", {
for(t in c("first","min","max")) {
# print(t)
tf <- t == "first"
expect_equal(fmode(NA, ties = t), Mode(NA, ties = t))
expect_equal(fmode(NA, na.rm = FALSE, ties = t), Mode(NA, ties = t))
expect_equal(fmode(1, ties = t), Mode(1, na.rm = TRUE, ties = t))
expect_equal(fmode(1:3, ties = t), Mode(1:3, na.rm = TRUE, ties = t))
expect_equal(fmode(-1:1, ties = t), Mode(-1:1, na.rm = TRUE, ties = t))
expect_equal(fmode(1, na.rm = FALSE, ties = t), Mode(1, ties = t))
expect_equal(fmode(1:3, na.rm = FALSE, ties = t), Mode(1:3, ties = t))
expect_equal(fmode(-1:1, na.rm = FALSE, ties = t), Mode(-1:1, ties = t))
expect_equal(fmode(x, ties = t), Mode(x, na.rm = TRUE, ties = t))
expect_equal(fmode(x, na.rm = FALSE, ties = t), Mode(x, ties = t))
if(tf) expect_equal(fmode(xNA, na.rm = FALSE, ties = t), Mode(xNA, ties = t))
expect_equal(fmode(xNA, ties = t), Mode(xNA, na.rm = TRUE, ties = t))
# expect_equal(as.character(fmode(data, drop = FALSE)), fmode(m))
expect_equal(fmode(m, ties = t), dapply(m, Mode, na.rm = TRUE, ties = t))
expect_equal(fmode(m, na.rm = FALSE, ties = t), dapply(m, Mode, ties = t))
if(tf) expect_equal(fmode(mNA, na.rm = FALSE, ties = t), dapply(mNA, Mode, ties = t))
expect_equal(fmode(mNA, ties = t), dapply(mNA, Mode, na.rm = TRUE, ties = t))
expect_equal(fmode(getdata(tf), ties = t, drop = FALSE), dapply(getdata(tf), Mode, na.rm = TRUE, ties = t, drop = FALSE))
expect_equal(fmode(getdata(tf), na.rm = FALSE, ties = t, drop = FALSE), dapply(getdata(tf), Mode, ties = t, drop = FALSE))
if(tf) expect_equal(fmode(dataNA, na.rm = FALSE, ties = t, drop = FALSE), dapply(dataNA, Mode, ties = t, drop = FALSE))
expect_equal(fmode(getdataNA(tf), ties = t, drop = FALSE), dapply(getdataNA(tf), Mode, na.rm = TRUE, ties = t, drop = FALSE))
expect_equal(fmode(x, f, ties = t), BY(x, f, Mode, na.rm = TRUE, ties = t))
expect_equal(fmode(x, f, na.rm = FALSE, ties = t), BY(x, f, Mode, ties = t))
if(tf) expect_equal(fmode(xNA, f, na.rm = FALSE, ties = t), BY(xNA, f, Mode, ties = t))
expect_equal(fmode(xNA, f, ties = t), BY(xNA, f, Mode, na.rm = TRUE, ties = t))
expect_equal(fmode(m, g, ties = t), BY(m, g, Mode, na.rm = TRUE, ties = t))
expect_equal(fmode(m, g, na.rm = FALSE, ties = t), BY(m, g, Mode, ties = t))
if(tf) expect_equal(fmode(mNA, g, na.rm = FALSE), BY(mNA, g, Mode)) # Mode gives NA
expect_equal(fmode(mNA, g, ties = t), BY(mNA, g, Mode, na.rm = TRUE, ties = t))
expect_equal(fmode(getdata(tf), g, ties = t), BY(getdata(tf), g, Mode, na.rm = TRUE, ties = t))
expect_equal(fmode(getdata(tf), g, na.rm = FALSE, ties = t), BY(getdata(tf), g, Mode, ties = t))
if(tf) expect_equal(fmode(dataNA, g, na.rm = FALSE), BY(dataNA, g, Mode)) # Mode gives NA
expect_equal(fmode(getdataNA(tf), g, ties = t), BY(getdataNA(tf), g, Mode, na.rm = TRUE, ties = t))
}
})
}
test_that("fmode with weights performs as intended (unbiased)", {
expect_equal(fmode(c(2,2,4,5,5,5)), fmode(c(2,4,5), w = c(2,1,3)))
expect_equal(fmode(c(2,2,4,5,5,5), na.rm = FALSE), fmode(c(2,4,5), w = c(2,1,3), na.rm = FALSE))
expect_equal(fmode(c(2.456,2.456,4.123,5.009,5.009,5.009)), fmode(c(2.456,4.123,5.009), w = c(2,1,3)))
expect_equal(fmode(c(2.456,2.456,4.123,5.009,5.009,5.009), na.rm = FALSE), fmode(c(2.456,4.123,5.009), w = c(2,1,3), na.rm = FALSE))
expect_equal(fmode(c(2,2,NA,5,5,5)), fmode(c(2,NA,5), w = c(2,1,3)))
expect_equal(fmode(c(2,2,NA,5,5,5), na.rm = FALSE), fmode(c(2,NA,5), w = c(2,1,3), na.rm = FALSE))
expect_equal(fmode(c(2,2,NA,5,5,5)), fmode(c(2,4,5), w = c(2,NA,3)))
expect_equal(fmode(c(2,2,NA,5,5,5), na.rm = FALSE), fmode(c(2,4,5), w = c(2,NA,3), na.rm = FALSE))
expect_equal(fmode(c(NA,NA,4.123,5.009,5.009,5.009)), fmode(c(NA,4.123,5.009), w = c(2,1,3)))
expect_equal(fmode(c(NA,NA,4.123,5.009,5.009,5.009), na.rm = FALSE), fmode(c(NA,4.123,5.009), w = c(2,1,3), na.rm = FALSE))
expect_equal(fmode(c(NA,NA,4.123,5.009,5.009,5.009)), fmode(c(2.456,4.123,5.009), w = c(NA,1,3)))
expect_equal(fmode(c(NA,NA,4.123,5.009,5.009,5.009), na.rm = FALSE), fmode(c(2.456,4.123,5.009), w = c(NA,1,3), na.rm = FALSE))
f <- as.factor(rep(1:2, each = 6)); fs <- as.factor(rep(1:2, each = 3))
v <- c(2,2,4,5,5,5,2,2,4,5,5,5); vs <- c(2,4,5,2,4,5); w <- c(2,1,3,2,1,3)
v2 <- c(2.456,2.456,4.123,5.009,5.009,5.009,2.456,2.456,4.123,5.009,5.009,5.009); v2s <- c(2.456,4.123,5.009,2.456,4.123,5.009)
expect_equal(fmode(v, f), fmode(vs, fs, w))
expect_equal(fmode(v, f, na.rm = FALSE), fmode(vs, fs, w, na.rm = FALSE))
expect_equal(fmode(v2, f), fmode(v2s, fs, w))
expect_equal(fmode(v2, f, na.rm = FALSE), fmode(v2s, fs, w, na.rm = FALSE))
v[c(3,9)] <- NA; vs[c(2,5)] <- NA
expect_equal(fmode(v, f), fmode(vs, fs, w))
expect_equal(fmode(v, f, na.rm = FALSE), fmode(vs, fs, w, na.rm = FALSE))
vs[c(2,5)] <- 4; w[c(2,5)] <- NA
expect_equal(fmode(v, f), fmode(vs, fs, w))
expect_equal(fmode(v, f, na.rm = FALSE), fmode(vs, fs, w, na.rm = FALSE))
w[c(2,5)] <- 1; v2[c(1:2,7:8)] <- NA; v2s[c(1,4)] <- NA
expect_equal(fmode(v2, f), fmode(v2s, fs, w))
expect_equal(fmode(v2, f, na.rm = FALSE), fmode(v2s, fs, w, na.rm = FALSE))
v2s[c(1,4)] <- 2.456; w[c(1,4)] <- NA
expect_equal(fmode(v2, f), fmode(v2s, fs, w))
expect_equal(fmode(v2, f, na.rm = FALSE), fmode(v2s, fs, w, na.rm = FALSE))
})
test_that("fmode performs like fmode with weights all equal", {
for(t in c("first","min","max")) {
expect_equal(fmode(NA, ties = t), fmode(NA, w = 0.9, ties = t))
expect_equal(fmode(NA, na.rm = FALSE, ties = t), fmode(NA, w = 2.946, na.rm = FALSE, ties = t))
expect_equal(fmode(1, ties = t), fmode(1, w = 3, ties = t))
expect_equal(fmode(1:3, ties = t), fmode(1:3, w = rep(0.9,3), ties = t))
expect_equal(fmode(-1:1, ties = t), fmode(-1:1, w = rep(4.2,3), ties = t))
expect_equal(fmode(1, na.rm = FALSE, ties = t), fmode(1, w = 5, na.rm = FALSE, ties = t))
expect_equal(fmode(1:3, na.rm = FALSE, ties = t), fmode(1:3, w = rep(1.4, 3), na.rm = FALSE, ties = t))
expect_equal(fmode(-1:1, na.rm = FALSE, ties = t), fmode(-1:1, w = rep(1.4, 3), na.rm = FALSE, ties = t))
expect_equal(fmode(x, ties = t), fmode(x, w = rep(1,100), ties = t))
expect_equal(fmode(x, na.rm = FALSE, ties = t), fmode(x, w = rep(1.4, 100), na.rm = FALSE, ties = t)) # failed on patched solaris...
expect_equal(fmode(xNA, na.rm = FALSE, ties = t), fmode(xNA, w = rep(4.6, 100), na.rm = FALSE, ties = t))
expect_equal(fmode(xNA, ties = t), fmode(xNA, w = rep(4.6, 100), ties = t)) # failed on patched solaris...
expect_equal(fmode(m, ties = t), fmode(m, w = rep(6587, l), ties = t))
expect_equal(fmode(m, na.rm = FALSE, ties = t), fmode(m, w = rep(6587, l), na.rm = FALSE, ties = t))
expect_equal(fmode(mNA, na.rm = FALSE, ties = t), fmode(mNA, w = rep(6587, l), na.rm = FALSE, ties = t))
expect_equal(fmode(mNA, ties = t), fmode(mNA, w = rep(6587, l), ties = t))
expect_equal(fmode(data, ties = t), fmode(data, w = rep(6787, l), ties = t))
expect_equal(fmode(data, na.rm = FALSE, ties = t), fmode(data, w = rep(6787, l), na.rm = FALSE, ties = t))
expect_equal(fmode(dataNA, na.rm = FALSE, ties = t), fmode(dataNA, w = rep(6787, l), na.rm = FALSE, ties = t))
expect_equal(fmode(dataNA, ties = t), fmode(dataNA, w = rep(6787, l), ties = t))
expect_equal(fmode(x, f, ties = t), fmode(x, f, rep(546,100), ties = t))
expect_equal(fmode(x, f, na.rm = FALSE, ties = t), fmode(x, f, rep(5,100), na.rm = FALSE, ties = t))
expect_equal(fmode(xNA, f, na.rm = FALSE, ties = t), fmode(xNA, f, rep(52.7,100), na.rm = FALSE, ties = t)) # Failed sometimes for some reason... v. 1.5.1 error
expect_equal(fmode(xNA, f, ties = t), fmode(xNA, f, rep(599,100), ties = t))
expect_equal(fmode(m, g, ties = t), fmode(m, g, rep(546,l), ties = t))
expect_equal(fmode(m, g, na.rm = FALSE, ties = t), fmode(m, g, rep(1,l), na.rm = FALSE, ties = t))
expect_equal(fmode(mNA, g, na.rm = FALSE, ties = t), fmode(mNA, g, rep(7,l), na.rm = FALSE, ties = t))
expect_equal(fmode(mNA, g, ties = t), fmode(mNA, g, rep(1,l), ties = t))
expect_equal(fmode(data, g, ties = t), fmode(data, g, rep(53,l), ties = t))
expect_equal(fmode(data, g, na.rm = FALSE, ties = t), fmode(data, g, rep(546,l), na.rm = FALSE, ties = t))
expect_equal(fmode(dataNA, g, na.rm = FALSE, ties = t), fmode(dataNA, g, rep(1,l), na.rm = FALSE, ties = t)) # rep(0.999999,l) failed CRAN Arch i386
expect_equal(fmode(dataNA, g, ties = t), fmode(dataNA, g, rep(999,l), ties = t)) # rep(999.9999,l) failed CRAN Arch i386
}
})
test_that("fmode with weights performs like wMode (defined above)", {
for(t in c("first","min","max")) {
# print(t)
tf <- t == "first"
# complete weights
expect_equal(fmode(NA, w = 1, ties = t), wMode(NA, 1, ties = t))
expect_equal(fmode(NA, w = 1, na.rm = FALSE, ties = t), wMode(NA, 1, ties = t))
expect_equal(fmode(1, w = 1, ties = t), wMode(1, w = 1, ties = t))
expect_equal(fmode(1:3, w = 1:3, ties = t), wMode(1:3, 1:3, ties = t))
expect_equal(fmode(-1:1, w = 1:3, ties = t), wMode(-1:1, 1:3, ties = t))
expect_equal(fmode(1, w = 1, na.rm = FALSE, ties = t), wMode(1, 1, ties = t))
expect_equal(fmode(1:3, w = c(0.99,3454,1.111), na.rm = FALSE, ties = t), wMode(1:3, c(0.99,3454,1.111), ties = t))
expect_equal(fmode(-1:1, w = 1:3, na.rm = FALSE, ties = t), wMode(-1:1, 1:3, ties = t))
expect_equal(fmode(x, w = w, ties = t), wMode(x, w, ties = t))
expect_equal(fmode(x, w = w, na.rm = FALSE, ties = t), wMode(x, w, ties = t))
if(tf) expect_equal(fmode(xNA, w = w, na.rm = FALSE, ties = t), wMode(xNA, w, ties = t))
expect_equal(fmode(xNA, w = w, ties = t), wMode(xNA, w, na.rm = TRUE, ties = t))
# expect_equal(fmode(data, w = wdat, drop = FALSE, ties = t), fmode(m, w = wdat, ties = t))
expect_equal(fmode(m, w = wdat, ties = t), dapply(m, wMode, wdat, na.rm = TRUE, ties = t))
expect_equal(fmode(m, w = wdat, na.rm = FALSE, ties = t), dapply(m, wMode, wdat, ties = t))
if(tf) expect_equal(fmode(mNA, w = wdat, na.rm = FALSE, ties = t), dapply(mNA, wMode, wdat, ties = t))
expect_equal(fmode(mNA, w = wdat, ties = t), dapply(mNA, wMode, wdat, na.rm = TRUE, ties = t))
expect_equal(fmode(getdata(tf), w = wdat, drop = FALSE, ties = t), dapply(getdata(tf), wMode, wdat, na.rm = TRUE, drop = FALSE, ties = t))
expect_equal(fmode(getdata(tf), w = wdat, na.rm = FALSE, drop = FALSE, ties = t), dapply(getdata(tf), wMode, wdat, drop = FALSE, ties = t))
if(tf) expect_equal(fmode(dataNA, w = wdat, na.rm = FALSE, drop = FALSE, ties = t), dapply(dataNA, wMode, wdat, drop = FALSE, ties = t))
expect_equal(fmode(getdataNA(tf), w = wdat, drop = FALSE, ties = t), dapply(getdataNA(tf), wMode, wdat, na.rm = TRUE, drop = FALSE, ties = t))
expect_equal(fmode(x, f, w, ties = t), BY(x, f, wMode, w, ties = t))
expect_equal(fmode(x, f, w, na.rm = FALSE, ties = t), BY(x, f, wMode, w, ties = t))
if(tf) expect_equal(fmode(xNA, f, w, na.rm = FALSE, ties = t), BY(xNA, f, wMode, w, ties = t))
expect_equal(fmode(xNA, f, w, ties = t), BY(xNA, f, wMode, w, na.rm = TRUE, ties = t))
expect_equal(fmode(m, g, wdat, ties = t), BY(m, gf, wMode, wdat, na.rm = TRUE, ties = t))
expect_equal(fmode(m, g, wdat, na.rm = FALSE, ties = t), BY(m, gf, wMode, wdat, ties = t))
if(tf) expect_equal(fmode(mNA, g, wdat, na.rm = FALSE, ties = t), BY(mNA, gf, wMode, wdat, ties = t))
expect_equal(fmode(mNA, g, wdat, ties = t), BY(mNA, gf, wMode, wdat, na.rm = TRUE, ties = t))
expect_equal(fmode(getdata(tf), g, wdat, ties = t), BY(getdata(tf), gf, wMode, wdat, na.rm = TRUE, ties = t))
expect_equal(fmode(getdata(tf), g, wdat, na.rm = FALSE, ties = t), BY(getdata(tf), gf, wMode, wdat, ties = t))
if(tf) expect_equal(fmode(dataNA, g, wdat, na.rm = FALSE, ties = t), BY(dataNA, gf, wMode, wdat, ties = t))
expect_equal(fmode(getdataNA(tf), g, wdat, ties = t), BY(getdataNA(tf), gf, wMode, wdat, na.rm = TRUE, ties = t))
# missing weights: # missing weights are summed : wsum is NA.... fmode does not properly deal with missing weights if na.rm = FALSE
expect_equal(fmode(NA, w = NA, ties = t), wMode(NA, NA, ties = t))
# expect_equal(fmode(1, w = NA, ties = t), wMode(1, w = NA, ties = t))
expect_equal(fmode(1:3, w = c(NA,1:2), ties = t), wMode(1:3, c(NA,1:2), na.rm = TRUE, ties = t))
expect_equal(fmode(-1:1, w = c(NA,1:2), ties = t), wMode(-1:1, c(NA,1:2), na.rm = TRUE, ties = t))
expect_equal(fmode(x, w = wNA, ties = t), wMode(x, wNA, na.rm = TRUE, ties = t))
expect_equal(fmode(xNA, w = wNA, ties = t), wMode(xNA, wNA, na.rm = TRUE, ties = t))
# expect_equal(fmode(data, w = wdatNA, ties = t), fmode(m, w = wdatNA, ties = t))
expect_equal(fmode(m, w = wdatNA, ties = t), dapply(m, wMode, wdatNA, na.rm = TRUE, ties = t))
expect_equal(fmode(mNA, w = wdatNA, ties = t), dapply(mNA, wMode, wdatNA, na.rm = TRUE, ties = t))
expect_equal(fmode(getdata(tf), w = wdatNA, ties = t, drop = FALSE), dapply(getdata(tf), wMode, wdatNA, na.rm = TRUE, ties = t, drop = FALSE))
expect_equal(fmode(getdataNA(tf), w = wdatNA, ties = t, drop = FALSE), dapply(getdataNA(tf), wMode, wdatNA, na.rm = TRUE, ties = t, drop = FALSE))
expect_equal(fmode(x, f, wNA, ties = t), BY(x, f, wMode, wNA, na.rm = TRUE, ties = t)) # failed on MAC OSX
expect_equal(fmode(xNA, f, wNA, ties = t), BY(xNA, f, wMode, wNA, na.rm = TRUE, ties = t)) # failed on mac OSX...
expect_equal(fmode(m, g, wdatNA, ties = t), BY(m, gf, wMode, wdatNA, na.rm = TRUE, ties = t))
expect_equal(fmode(mNA, g, wdatNA, ties = t), BY(mNA, gf, wMode, wdatNA, na.rm = TRUE, ties = t))
expect_equal(fmode(getdata(tf), g, wdatNA, ties = t), BY(getdata(tf), gf, wMode, wdatNA, na.rm = TRUE, ties = t))
expect_equal(fmode(getdataNA(tf), g, wdatNA, ties = t), BY(getdataNA(tf), gf, wMode, wdatNA, na.rm = TRUE, ties = t))
}
})
test_that("fmode performs numerically stable", {
for(t in c("first","min","max")) {
expect_true(all_obj_equal(replicate(50, fmode(1, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(NA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(NA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, f, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, f, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, f, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, f, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, g, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, g, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, g, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, g, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, g, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, g, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, g, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, g, ties = t), simplify = FALSE)))
}
})
test_that("fmode with complete weights performs numerically stable", {
for(t in c("first","min","max")) {
expect_true(all_obj_equal(replicate(50, fmode(1, w = 1, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(NA, w = 1, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(NA, w = 1, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, w = w, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, w = w, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, w = w, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, w = w, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, w = wdat, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, w = wdat, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, w = wdat, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, w = wdat, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, w = wdat, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, w = wdat, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, w = wdat, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, w = wdat, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, f, w, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, f, w, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, f, w, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, f, w, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, g, wdat, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, g, wdat, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, g, wdat, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, g, wdat, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, g, wdat, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, g, wdat, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, g, wdat, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, g, wdat, ties = t), simplify = FALSE)))
}
})
test_that("fmode with missing weights performs numerically stable", {
for(t in c("first","min","max")) {
expect_true(all_obj_equal(replicate(50, fmode(1, w = NA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(NA, w = NA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(NA, w = NA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, w = wNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, w = wNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, w = wNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, w = wNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, w = wdatNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, w = wdatNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, w = wdatNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, w = wdatNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, w = wdatNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, w = wdatNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, w = wdatNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, w = wdatNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, f, wNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(x, f, wNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, f, wNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(xNA, f, wNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, g, wdatNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(m, g, wdatNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, g, wdatNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(mNA, g, wdatNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, g, wdatNA, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(data, g, wdatNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, g, wdatNA, na.rm = FALSE, ties = t), simplify = FALSE)))
expect_true(all_obj_equal(replicate(50, fmode(dataNA, g, wdatNA, ties = t), simplify = FALSE)))
}
})
test_that("fmode handles special values in the right way", {
expect_equal(fmode(NA), NA)
expect_equal(fmode(NaN), NaN)
expect_equal(fmode(Inf), Inf)
expect_equal(fmode(-Inf), -Inf)
expect_equal(fmode(TRUE), TRUE)
expect_equal(fmode(FALSE), FALSE)
expect_equal(fmode(NA, na.rm = FALSE), NA)
expect_equal(fmode(NaN, na.rm = FALSE), NaN)
expect_equal(fmode(Inf, na.rm = FALSE), Inf)
expect_equal(fmode(-Inf, na.rm = FALSE), -Inf)
expect_equal(fmode(TRUE, na.rm = FALSE), TRUE)
expect_equal(fmode(FALSE, na.rm = FALSE), FALSE)
expect_equal(fmode(c(1,NA)), 1)
expect_equal(fmode(c(1,NaN)), 1)
expect_equal(fmode(c(1,Inf)), 1)
expect_equal(fmode(c(1,-Inf)), 1)
expect_equal(fmode(c(FALSE,TRUE)), FALSE)
expect_equal(fmode(c(FALSE,FALSE)), FALSE)
expect_equal(fmode(c(1,Inf), na.rm = FALSE), 1)
expect_equal(fmode(c(1,-Inf), na.rm = FALSE), 1)
expect_equal(fmode(c(FALSE,TRUE), na.rm = FALSE), FALSE)
expect_equal(fmode(c(FALSE,FALSE), na.rm = FALSE), FALSE)
})
test_that("fmode with weights handles special values in the right way", {
expect_equal(fmode(NA, w = 1), NA)
expect_equal(fmode(NaN, w = 1), NaN)
expect_equal(fmode(Inf, w = 1), Inf)
expect_equal(fmode(-Inf, w = 1), -Inf)
expect_equal(fmode(TRUE, w = 1), TRUE)
expect_equal(fmode(FALSE, w = 1), FALSE)
expect_equal(fmode(NA, w = 1, na.rm = FALSE), NA)
expect_equal(fmode(NaN, w = 1, na.rm = FALSE), NaN)
expect_equal(fmode(Inf, w = 1, na.rm = FALSE), Inf)
expect_equal(fmode(-Inf, w = 1, na.rm = FALSE), -Inf)
expect_equal(fmode(TRUE, w = 1, na.rm = FALSE), TRUE)
expect_equal(fmode(FALSE, w = 1, na.rm = FALSE), FALSE)
expect_equal(fmode(NA, w = NA), NA)
expect_equal(fmode(NaN, w = NA), NaN)
expect_equal(fmode(Inf, w = NA), Inf)
expect_equal(fmode(-Inf, w = NA), -Inf)
expect_equal(fmode(TRUE, w = NA), TRUE)
expect_equal(fmode(FALSE, w = NA), FALSE)
expect_equal(fmode(NA, w = NA, na.rm = FALSE), NA)
expect_equal(fmode(NaN, w = NA, na.rm = FALSE), NaN)
expect_equal(fmode(Inf, w = NA, na.rm = FALSE), Inf)
expect_equal(fmode(-Inf, w = NA, na.rm = FALSE), -Inf)
expect_equal(fmode(TRUE, w = NA, na.rm = FALSE), TRUE)
expect_equal(fmode(FALSE, w = NA, na.rm = FALSE), FALSE)
expect_equal(fmode(1:3, w = c(1,Inf,3)), 2)
expect_equal(fmode(1:3, w = c(1,-Inf,3)), 3)
expect_equal(fmode(1:3, w = c(1,Inf,3), na.rm = FALSE), 2)
expect_equal(fmode(1:3, w = c(1,-Inf,3), na.rm = FALSE), 3)
})
test_that("fmode produces errors for wrong input", {
expect_visible(fmode("a"))
expect_visible(fmode(NA_character_))
expect_visible(fmode(mNA))
expect_error(fmode(mNA, f))
expect_error(fmode(1:2,1:3))
expect_error(fmode(m,1:31))
expect_error(fmode(data,1:31))
expect_error(fmode(data, w = 1:31))
expect_visible(fmode("a", w = 1))
expect_error(fmode(1:2, w = 1:3))
expect_visible(fmode(NA_character_, w = 1))
expect_visible(fmode(mNA, w = wdat))
expect_error(fmode(mNA, f, wdat))
expect_error(fmode(mNA, w = 1:33))
expect_error(fmode(1:2,1:2, 1:3))
expect_error(fmode(m,1:32,1:20))
expect_error(fmode(data,1:32,1:10))
expect_error(fmode(1:2, w = c("a","b")))
expect_visible(fmode(wlddev))
expect_visible(fmode(wlddev, w = wlddev$year, drop = FALSE))
expect_visible(fmode(wlddev, wlddev$iso3c))
expect_visible(fmode(wlddev, wlddev$iso3c, wlddev$year))
})
}
test_that("Singleton group optimization works properly", {
g <- GRP(as.character(seq_row(mtcars)))
w <- mtcars$wt
expect_equal(unattrib(fmode(mtcars$mpg, g)), mtcars$mpg[g$order])
expect_equal(unattrib(fmode(mtcars$mpg, g, w)), mtcars$mpg[g$order])
g <- GRP(seq_row(mtcars))
expect_equal(unattrib(fmode(mtcars$mpg, g)), mtcars$mpg[g$order])
expect_equal(unattrib(fmode(mtcars$mpg, g, w)), mtcars$mpg[g$order])
g <- GRP(sample.int(100, 32))
expect_equal(unattrib(fmode(mtcars$mpg, g)), mtcars$mpg[g$order])
expect_equal(unattrib(fmode(mtcars$mpg, g, w)), mtcars$mpg[g$order])
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.