simpleApply {arrayMagic} | R Documentation |
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
!
simpleApply(arrayObject, dimensions, func, funcResultDimensionality, DEBUG=FALSE)
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 |
array
of dim=c(dim( arrayObject[dimensions] ),
funcResultDimensionality )
;
possibly use aperm
to rearrange the dimensions
Andreas Buness <a.buness@dkfz.de>
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 ) )