Nothing
# Testing collapse is time consuming, skip if ran
skip_collapse <- Sys.getenv("FILEARRAY_SKIP_COLLAPSE", unset = "") == "TRUE"
testthat::skip_if(skip_collapse)
collapse_real <- function(y,
keep,
transform = c("asis", "10log10", "square", "sqrt", "normalize")) {
re <- switch(
transform,
"asis" = {
apply(y, keep, function(x) {
mean(x)
})
},
"10log10" = {
apply(y, keep, function(x) {
mean(10 * log10(x))
})
},
"square" = {
apply(y, keep, function(x) {
mean(x^2)
})
},
"sqrt" = {
apply(y, keep, function(x) {
mean(sqrt(x))
})
},
{
stop("wrong transform")
}
)
# if(storage.mode(re) != "double") {
# storage.mode(re) <- "double"
# }
re
}
collapse_cplx <- function(y,
keep,
transform = c("asis", "10log10", "square", "sqrt", "normalize")) {
re <- switch(
transform,
"asis" = {
apply(y, keep, mean)
},
"10log10" = {
apply(y, keep, function(x) {
mean(20 * log10(Mod(x)))
})
},
"square" = {
apply(y, keep, function(x) {
mean(Mod(x)^2)
})
},
"sqrt" = {
apply(y, keep, function(x) {
mean(Mod(x))
})
},
"normalize" = {
apply(y, keep, function(x) {
mean(x / Mod(x))
})
},
{
stop("wrong transform")
}
)
# if(storage.mode(re) != "double") {
# storage.mode(re) <- "double"
# }
re
}
expect_equivalent_cplx <- function(x, y, eps = 1e-6) {
expect_equal(is.na(x), is.na(y))
if (is.complex(x)) {
expect_lte(max(abs(Re(x - y)), na.rm = TRUE), eps)
expect_lte(max(abs(Im(x - y)), na.rm = TRUE), eps)
} else {
expect_lte(max(abs(x - y), na.rm = TRUE), eps)
}
}
test_that("R/C++ - Collapse", {
testthat::skip_on_cran()
bsz <- get_buffer_size()
on.exit({
set_buffer_size(bsz)
max_buffer_size(2097152)
})
set_buffer_size(16L)
max_buffer_size(64L)
# dim <- c(287, 100, 301, 7)
dim <- c(33:36)
set.seed(5)
file <- tempfile()
unlink(file, recursive = TRUE)
x <- filearray_create(
file,
dim,
type = "integer",
partition_size = 2,
initialize = FALSE
)
y <- array(1:(prod(dim)), dim)
y[[20, 3, 3, 3]] <- NA
storage.mode(y) <- "integer"
x[] <- y
# make sure x[] == y
expect_equal(x[], y)
# collapse
keep <- c(1, 2, 3, 4)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(1, 4, 3, 2)
expect_equal(
x$collapse(
keep = keep,
transform = "asis",
method = "mean"
),
collapse_real(y, keep, transform = "asis")
)
keep <- c(4, 2, 3, 1)
expect_equal(
x$collapse(
keep = keep,
transform = "asis",
method = "mean"
),
collapse_real(y, keep, transform = "asis")
)
keep <- c(3, 1)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(4, 1)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(4, 2)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(4, 3)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(4)
for (transform in c("asis", "10log10", "square", "sqrt")) {
k <- x$collapse(keep = keep,
transform = transform,
method = "mean")
s <- collapse_real(y, keep, transform = transform)
diff <- max(abs(1 - s / k), na.rm = TRUE)
# cat(transform, diff, "\n")
expect_lt(diff, 1e-6)
}
keep <- c(4, 1, 3)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(3)
for (transform in c("asis", "10log10", "square", "sqrt")) {
k <- x$collapse(keep = keep,
transform = transform,
method = "mean")
s <- collapse_real(y, keep, transform = transform)
diff <- max(abs(1 - s / k), na.rm = TRUE)
# cat(transform, diff, "\n")
expect_lt(diff, 1e-6)
}
keep <- c(1)
for (transform in c("asis", "10log10", "square", "sqrt")) {
k <- x$collapse(keep = keep,
transform = transform,
method = "mean")
s <- collapse_real(y, keep, transform = transform)
diff <- max(abs(1 - s / k), na.rm = TRUE)
# cat(transform, diff, "\n")
expect_lt(diff, 1e-6)
}
})
test_that("R/C++ - Float", {
testthat::skip_on_cran()
bsz <- get_buffer_size()
on.exit({
set_buffer_size(bsz)
max_buffer_size(2097152)
})
set_buffer_size(16L)
max_buffer_size(64L)
# dim <- c(287, 100, 301, 7)
dim <- c(33:36)
set.seed(5)
file <- tempfile()
unlink(file, recursive = TRUE)
x <- filearray_create(
file,
dim,
type = "float",
partition_size = 2,
initialize = FALSE
)
y <- array(rnorm(length(x))^2, dim)
y[[20, 3, 3, 3]] <- NA
x[] <- y
# make sure x[] == y
eps <- 10^(ceiling(log10(max(abs(
y
), na.rm = TRUE))) - 7)
expect_equal(x[], y, tolerance = eps)
y <- x[]
# collapse
keep <- c(1, 2, 3, 4)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(1, 4, 3, 2)
expect_equal(
x$collapse(
keep = keep,
transform = "asis",
method = "mean"
),
collapse_real(y, keep, transform = "asis")
)
keep <- c(4, 2, 3, 1)
expect_equal(
x$collapse(
keep = keep,
transform = "asis",
method = "mean"
),
collapse_real(y, keep, transform = "asis")
)
keep <- c(3, 1)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(4, 1)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(4, 2)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(4, 3)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(4)
for (transform in c("asis", "10log10", "square", "sqrt")) {
k <- x$collapse(keep = keep,
transform = transform,
method = "mean")
s <- collapse_real(y, keep, transform = transform)
diff <- max(abs(1 - s / k), na.rm = TRUE)
# cat(transform, diff, "\n")
expect_lt(diff, 1e-6)
}
keep <- c(4, 1, 3)
for (transform in c("asis", "10log10", "square", "sqrt")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_real(y, keep, transform = transform)
)
}
keep <- c(3)
for (transform in c("asis", "10log10", "square", "sqrt")) {
k <- x$collapse(keep = keep,
transform = transform,
method = "mean")
s <- collapse_real(y, keep, transform = transform)
diff <- max(abs(1 - s / k), na.rm = TRUE)
# cat(transform, diff, "\n")
expect_lt(diff, 1e-6)
}
keep <- c(1)
for (transform in c("asis", "10log10", "square", "sqrt")) {
k <- x$collapse(keep = keep,
transform = transform,
method = "mean")
s <- collapse_real(y, keep, transform = transform)
diff <- max(abs(1 - s / k), na.rm = TRUE)
# cat(transform, diff, "\n")
expect_lt(diff, 1e-6)
}
})
test_that("R/C++ - Collapse (complex)", {
testthat::skip_on_cran()
bsz <- get_buffer_size()
on.exit({
set_buffer_size(bsz)
max_buffer_size(2097152)
})
set_buffer_size(16L)
max_buffer_size(64L)
# dim <- c(287, 100, 301, 7)
dim <- c(33:36)
set.seed(5)
file <- tempfile()
unlink(file, recursive = TRUE)
x <- filearray_create(
file,
dim,
type = "complex",
partition_size = 2,
initialize = FALSE
)
y <- array(rnorm(length(x)) + rnorm(length(x)) * 1i, dim)
y[[20, 3, 3, 3]] <- NA
x[] <- y
# make sure x[] == y
expect_equivalent_cplx(x[], y)
y <- x[]
# collapse
keep <- c(1, 2, 3, 4)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_cplx(y, keep, transform = transform)
)
}
keep <- c(1, 4, 3, 2)
expect_equal(
x$collapse(
keep = keep,
transform = "asis",
method = "mean"
),
collapse_cplx(y, keep, transform = "asis")
)
keep <- c(4, 2, 3, 1)
expect_equal(
x$collapse(
keep = keep,
transform = "asis",
method = "mean"
),
collapse_cplx(y, keep, transform = "asis")
)
keep <- c(3, 1)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_cplx(y, keep, transform = transform)
)
}
keep <- c(4, 1)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_cplx(y, keep, transform = transform)
)
}
keep <- c(4, 2)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_cplx(y, keep, transform = transform)
)
}
keep <- c(4, 3)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_cplx(y, keep, transform = transform)
)
}
keep <- c(4)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(max(abs(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
) -
collapse_cplx(y, keep, transform = transform)
), na.rm = TRUE), 0)
}
keep <- c(4, 1, 3)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
),
collapse_cplx(y, keep, transform = transform)
)
}
keep <- c(3)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(max(abs(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
) -
collapse_cplx(y, keep, transform = transform)
), na.rm = TRUE), 0)
}
keep <- c(1)
for (transform in c("asis", "10log10", "square", "sqrt", "normalize")) {
expect_equal(max(abs(
x$collapse(
keep = keep,
transform = transform,
method = "mean"
) -
collapse_cplx(y, keep, transform = transform)
), na.rm = TRUE), 0)
}
})
Sys.setenv("FILEARRAY_SKIP_COLLAPSE" = "TRUE")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.