R/applyCdfBlocks.R
65301877
 applyCdfBlocks <- function(cdf, fcn, ..., .key="blocks") {
   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   # Validate arguments
   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   # Argument 'cdf':
   if (!is.list(cdf)) {
     stop("Argument 'cdf' is not a list: ", mode(cdf));
   }
 
   # Argument 'fcn':
   if (!is.function(fcn)) {
     stop("Argument 'fcn' is not a function: ", mode(fcn));
   }
 
   # Nothing to do?
   nbrOfUnits <- length(cdf);
   if (nbrOfUnits == 0)
     return(cdf);
 
   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   # Iterate over all unit block sets.
   # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   # Assume that the 'blocks' field have the same position in all units!
   ff <- match(.key, names(cdf[[1]]));
   if (is.na(ff))
     stop("There is no such element in CDF structure: ", .key);
 
24277d85
   for (uu in seq_along(cdf)) {
65301877
     unit <- .subset2(cdf, uu);
     unit[[ff]] <- fcn(.subset2(unit, ff), ...);
     cdf[[uu]] <- unit;
   }
 
   cdf;
 }
 
 
 ############################################################################
 # HISTORY:
 # 2006-09-08
 # o Created from applyCdfGroups().  This is due to the planned name change 
 #   from 'groups' to 'blocks'.
 # 2006-02-23
 # o Created.
 ############################################################################