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 arrayMagic version 1.8.0 Index]