simpleApply {arrayMagic} | R Documentation

## simpleApply

### Description

Note: very slow. `func` is applied to all subsets of `arrayObject` defined by `dimensions`, i.e. for every element i of `arrayObject`[`dimensions`] the function `func` is applied to `arrayObject`[i]. `func` must be unary. Due to the recursive definition the function might not only be slow but also very memory intensive. The function aims to give you more control on the dimensionality of the return value in contrast to `apply`; cf. the examples. Attention: Be careful with `funcResultDimensionality` !

### Usage

    simpleApply(arrayObject, dimensions, func, funcResultDimensionality, DEBUG=FALSE)

### Arguments

`arrayObject` | object of type `array`; required; default: missing
`dimensions` | increasing numeric vector; required; default: missing
`func` | unary function; required; default: missing
`funcResultDimensionality` | numeric (vector) specifying the dimensionality of the result value of `func`
`DEBUG` | logical; required; default: `FALSE`; to trace the recursive calling you may use `DEBUG=TRUE`

### Value

`array` of `dim=c(dim( arrayObject[dimensions] ), funcResultDimensionality )`; possibly use `aperm` to rearrange the dimensions

### Author(s)

Andreas Buness <a.buness@dkfz.de>

### Examples

    a <- array(c(1:30),dim=c(3,2,5))
    r <- simpleApply(a, 1, function(x){return(x[2,5])}, 1)
    stopifnot( all(r == matrix(data=c(28:30))))

    r <- simpleApply(a, 2, function(x){return(x[,])}, c(3,5))
    stopifnot( all( a == aperm(r,c(2,1,3)) ) )

    vec <- 1:10; dim(vec) <- c(10,1)
    mat <- matrix(data=rep(1:10,4),nrow=10,ncol=4,byrow=FALSE)
    r <- simpleApply(mat,1,function(y){return(mean(y))},1)
    stopifnot(all(r==vec))

    r <- simpleApply(mat, 1:2, function(x) return(x), 1)
    stopifnot( all(r[,,1] == mat) )

    r <- simpleApply(a, c(1,3) , function(x) return(x), dim(a)[2])
    stopifnot( all(aperm(r[,,],c(1,3,2)) == a) )

    r <- simpleApply(a, 1:2, function(x) return(x[2]), 1)
    stopifnot( all(r[,,] == a[,,2]) )

    r <- simpleApply(a, 1, function(x) return(x), c(dim(a)[2],dim(a)[3]))
    stopifnot( all( r== a ) )

[Package Contents]