controlledApply          package:arrayMagic          R Documentation

_c_o_n_t_r_o_l_l_e_d_A_p_p_l_y

_D_e_s_c_r_i_p_t_i_o_n:

     Same functionality as 'simpleApply' but possibly faster. In
     certain circumstances the function 'apply' is used instead of
     'simpleApply' which improves the performace.

_U_s_a_g_e:

     controlledApply(arrayObject, dimensions, func, funcResultDimensionality)

_A_r_g_u_m_e_n_t_s:

arrayObject: object of class 'array'

dimensions: increasing numeric vector

    func: unary function

funcResultDimensionality: numeric (vector) specifying the
          dimensionality of the return value of 'func'

_V_a_l_u_e:

     An array of
     'dim=c(dim(arrayObject[dimensions]),funcResultDimensionality)'.
     You may want to use 'aperm' to rearrange the dimensions.

_A_u_t_h_o_r(_s):

     Andreas Buness <a.buness@dkfz.de>

_S_e_e _A_l_s_o:

     'simpleApply'

_E_x_a_m_p_l_e_s:

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

     r <- controlledApply(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 <- controlledApply(mat,1,function(y){return(mean(y))},1)
     stopifnot(all(r==vec))

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

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

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

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

      

      

