--- tapply.R 2016-01-09 12:19:58.188759800 +0700 +++ tapply269890newoldc.R 2016-01-09 19:33:01.734375000 +0700 @@ -37,12 +37,9 @@ for (i in 2L:nI) group <- group + cumextent[i - 1L] * (as.integer(INDEX[[i]]) - 1L) if (is.null(FUN)) return(group) - levels(group) <- as.character(seq_len(ngroup)) - class(group) <- "factor" - ans <- split(X, group) # use generic, e.g. for 'Date' + ans <- lapply(X = split(X, group), FUN = FUN, ...) # use generic, e.g. for 'Date' + index <- as.integer(names(ans)) names(ans) <- NULL - index <- as.logical(lengths(ans)) # equivalently, lengths(ans) > 0L - ans <- lapply(X = ans[index], FUN = FUN, ...) if (simplify && all(lengths(ans) == 1L)) { ansmat <- array(dim = extent, dimnames = namelist) ans <- unlist(ans, recursive = FALSE)