icount2 = function (count){
    if (missing(count))
        count <- NULL
    else if (!is.numeric(count) || length(count) != 1)
        stop("count must be a numeric value")
    i <- 0L
    nextEl <- function(){
    	if( is.null(i) )    		
        	(i <<- NULL)
        else if (is.null(count) || i < count)
            (i <<- i + 1L)
        else 
        	(i <<- NULL)
    }
    it <- list(nextElem = nextEl)
    class(it) <- c("abstractiter", "iter")
    it
}
#' @import iterators
#' @importFrom data.table data.table
clustIter = function( dfClustUnique, dfClust, epiSignal, testVariable ){
	n_clusters = nrow( dfClustUnique )
	xit = icount2( n_clusters )
	nextEl <- function( ) {
		i <- nextElem( xit )
		if( is.null(i) || i > n_clusters){
			res = NULL
		}else{
			ID = dfClustUnique$id[i]
			CHROM = dfClustUnique$chrom[i]
			CLST = dfClustUnique$cluster[i]
			id = chrom = cluster = peak = NA
			peakIDs = dfClust[(id==ID) & (chrom==CHROM) & (cluster==CLST),peak]
			# get two subsets of datas
		  	# Y1 = t(epiSignal[peakIDs,set1,drop=FALSE])
		  	# Y2 = t(epiSignal[peakIDs,set2,drop=FALSE])
		  	# if( ncol(Y1) != ncol(Y2) ){
		  	# 	stop("ncol(Y1) != ncol(Y2): ", ncol(Y1), ncol(Y2), "\n", i)
		  	# }
		  	res = list(Y 	= t(epiSignal[peakIDs,,drop=FALSE]),
		  			group 	= testVariable, 
		  			ID 		= ID, 
		  			CHROM 	= CHROM, 
		  			CLST 	= CLST, 
		  			i 		= i)
		}
		res
	}
	it <- list(nextElem = nextEl)
    class(it) <- c(  "abstractiter", "iter") 
	it
}
clustIterBatch = function( dfClust, epiSignal, testVariable, n_chunks = 100 ){
	n_clusters = countClusters(dfClust)
	# divide clusters into batches
	idx <- parallel::splitIndices(n_clusters, min(n_clusters, n_chunks))
    i <- 0L
    f = function() {
        if (i == length(idx)){
            return(NULL)
        }
        i <<- i + 1L
        # get subset of clusters
        clustObj = getClusterSubset( dfClust, idx[[i]] )
        # get cluster ids of the retained clusters
        df = attr(clustObj, "getClusterNames")
       
       	# extract peak ids
        peakIds = lapply( seq_len(nrow(df)), function(i){
        	getFeaturesInCluster( clustObj, df$chrom[i], as.character(df$cluster[i]), as.character(df$parameter[i]))
        	})
        peakIds = unlist(peakIds)
        list( 	clustObj = clustObj,
        		signalObj = epiSignal[peakIds,,drop=FALSE],
        		testVariable = testVariable )
    }
    attr( f, "n_chunks") = length(idx)
    f
}
corrIterBatch = function( treeList, treeListClusters, df_count, n_chunks = 100 ){
    index = meanClusterSize = NA
    df_count = data.table(df_count)
    df_count[,index:=seq_len(nrow(df_count))]
    # divide batches to include a single chrom and meanClusterSize
    idx = list()
    i = 1
    for(chrom_ in unique(df_count$chrom)){
        for(id in unique(df_count$meanClusterSize)){
            idx[[i]] = df_count[chrom==chrom_ & meanClusterSize==id, index]
            i = i + 1
        }
    }
    i <- 0L
    f = function() {
        if (i == length(idx)){
            return(NULL)
        }
        i <<- i + 1L
        df_sub = df_count[idx[[i]],]
        chrom = df_sub[,unique(chrom)]
        id = as.character(df_sub[,unique(meanClusterSize)])
        treeList_sub = treeList[[chrom]]
        treeListClusters_sub = treeListClusters[[id]][[chrom]]
        list(   treeList            = treeList_sub,
                treeListClusters    = treeListClusters_sub,
                df_count            = df_sub, 
                chrom               = chrom,
                id                   = id)         
    }
    attr( f, "n_chunks") = length(idx)
    f
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.