Commit 48646603 authored by Nicolau Manubens Gil's avatar Nicolau Manubens Gil
Browse files

Merge branch 'master' into 'production'

Master

See merge request !10
parents a06e5067 bf4b09fc
Pipeline #894 failed with stage
Package: multiApply
Title: Apply Functions to Multiple Multidimensional Arrays or Vectors
Version: 2.0.0
Authors@R: c(
Version: 2.0.1
Authors@R: c(
person("BSC-CNS", role = c("aut", "cph")),
person("Nicolau", "Manubens", , "nicolau.manubens@bsc.es", role = "aut"),
person("Alasdair", "Hunter", , "alasdair.hunter@bsc.es", role = "aut"),
person("Nuria", "Perez", , "nuria.perez@bsc.es", role = "cre"))
Description: The base apply function and its variants, as well as the related functions in the 'plyr' package, typically apply user-defined functions to a single argument (or a list of vectorized arguments in the case of mapply). The 'multiApply' package extends this paradigm with its only function, Apply, which efficiently applies functions taking one or a list of multiple unidimensional or multidimensional numeric arrays (or combinations thereof) as input. The input arrays can have different numbers of dimensions as well as different dimension lengths, and the applied function can return one or a list of unidimensional or multidimensional arrays as output. This saves development time by preventing the R user from writing often error-prone and memory-unefficient loops dealing with multiple complex arrays. Also, a remarkable feature of Apply is the transparent use of multi-core through its parameter 'ncores'. In contrast to the base apply function, this package suggests the use of 'target dimensions' as opposite to the 'margins' for specifying the dimensions relevant to the function to be applied.
Description: The base apply function and its variants, as well as the related
functions in the 'plyr' package, typically apply user-defined functions to a
single argument (or a list of vectorized arguments in the case of mapply). The
'multiApply' package extends this paradigm with its only function, Apply, which
efficiently applies functions taking one or a list of multiple unidimensional
or multidimensional numeric arrays (or combinations thereof) as input. The input
arrays can have different numbers of dimensions as well as different dimension
lengths, and the applied function can return one or a list of unidimensional or
multidimensional arrays as output. This saves development time by preventing the
R user from writing often error-prone and memory-inefficient loops dealing with
multiple complex arrays. Also, a remarkable feature of Apply is the transparent
use of multi-core through its parameter 'ncores'. In contrast to the base apply
function, this package suggests the use of 'target dimensions' as opposite
to the 'margins' for specifying the dimensions relevant to the function to be
applied.
Depends:
R (>= 3.2.0)
Imports:
......
......@@ -5,3 +5,4 @@ importFrom(doParallel,registerDoParallel)
importFrom(foreach,registerDoSEQ)
importFrom(plyr,llply)
importFrom(plyr,splat)
importFrom(utils,capture.output)
......@@ -29,6 +29,7 @@
#' @importFrom foreach registerDoSEQ
#' @importFrom doParallel registerDoParallel
#' @importFrom plyr splat llply
#' @importFrom utils capture.output
Apply <- function(data, target_dims = NULL, fun, ...,
output_dims = NULL, margins = NULL, guess_dim_names = TRUE,
ncores = NULL, split_factor = 1) {
......@@ -527,8 +528,10 @@ Apply <- function(data, target_dims = NULL, fun, ...,
if (!is.null(component_dims)) {
atomic_fun_out_dims[[component]] <- component_dims
}
sub_arrays_of_results[[component]][(1:prod(component_dims)) +
(n - 1) * prod(component_dims)] <- result[[component]]
if (length(result[[component]]) > 0) {
sub_arrays_of_results[[component]][(1:prod(component_dims)) +
(n - 1) * prod(component_dims)] <- result[[component]]
}
}
if (!found_first_sub_result) {
found_first_sub_result <- TRUE
......
## multiApply [![build status](https://earth.bsc.es/gitlab/ces/multiApply/badges/master/build.svg)](https://earth.bsc.es/gitlab/ces/multiApply/commits/master) [![CRAN version](http://www.r-pkg.org/badges/version/multiApply)](https://cran.r-project.org/package=multiApply) [![coverage report](https://earth.bsc.es/gitlab/ces/multiApply/badges/master/coverage.svg)](https://earth.bsc.es/gitlab/ces/multiApply/commits/master) [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) [![CRAN RStudio Downloads](https://cranlogs.r-pkg.org/badges/multiApply)](https://cran.rstudio.com/web/packages/multiApply/index.html)
## multiApply [![build status](https://earth.bsc.es/gitlab/ces/multiApply/badges/master/build.svg)](https://earth.bsc.es/gitlab/ces/multiApply/commits/master) [![CRAN version](http://www.r-pkg.org/badges/version/multiApply)](https://cran.r-project.org/package=multiApply) [![coverage report](https://earth.bsc.es/gitlab/ces/multiApply/badges/master/coverage.svg)](https://earth.bsc.es/gitlab/ces/multiApply/commits/master) [![License: LGPL v3](https://img.shields.io/badge/License-LGPL%20v3-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0) [![CRAN RStudio Downloads](https://cranlogs.r-pkg.org/badges/multiApply)](https://cran.r-project.org/package=multiApply)
This package includes the function `Apply` as its only function. It extends the `apply` function to applications in which a function needs to be applied simultaneously over multiple input arrays. Although this can be done manually with for loops and calls to the base `apply` function, it can often be a challenging task which can easily result in error-prone or memory-unefficient code.
This package includes the function `Apply` as its only function. It extends the `apply` function to applications in which a function needs to be applied simultaneously over multiple input arrays. Although this can be done manually with for loops and calls to the base `apply` function, it can often be a challenging task which can easily result in error-prone or memory-inefficient code.
A very simple example follows showing the kind of situation where `Apply` can be useful: imagine you have two arrays, each containing five 2x2 matrices, and you want to perform the multiplication of each of the five pairs of matrices. Next, one of the best ways to do this with base R (plus some helper libraries):
......
No preview for this file type
......@@ -1200,7 +1200,9 @@ test_that("in1: 2 dim; in2: 1 dim; targ. dims: 0-2, 0-1; out1: 1 dim; out2: 1 va
# Real cases
test_that("real use case - standardization", {
standardization <- function(x, mean, deviation){
(x - mean) / deviation
r <- (x - mean) / deviation
names(dim(r)) <- NULL
r
}
x <- array(1:(2*3*4), dim = c(mod = 2, lon = 3, lat = 4))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment