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.