simpleApply            package:arrayMagic            R Documentation

_s_i_m_p_l_e_A_p_p_l_y

_D_e_s_c_r_i_p_t_i_o_n:

     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' !

_U_s_a_g_e:

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

_A_r_g_u_m_e_n_t_s:

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'

_V_a_l_u_e:

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

_A_u_t_h_o_r(_s):

     Andreas Buness <a.buness@dkfz.de>

_E_x_a_m_p_l_e_s:

     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 ) )

      

             

