buildTaskTree <- function (taskList) { form <- list() for (tid in taskList) { path <- strsplit(tid,"/")[[1]] ## Trim CAF name and task name path <- path[5:(length(path)-1)] form <- buildTaskTreeAux(form,path,tid) } form } buildTaskTreeAux <- function (set,path,tid) { if (length(path) ==1) { set[[path]] <- c(set[[path]],tid) } else { sub <- path[1] subset <- set[[sub]] if (is.null(subset)) { subset <- list() } set[[sub]] <- buildTaskTreeAux(subset,path[2:length(path)],tid) } set } splitTaskTree <- function (tt) { result <- list(formA=character(),formB=character(),remainder=character()) splitTaskTreeAux(tt,result) } splitTaskTreeAux <- function (tt,result) { if(is.character(tt)) { n <- length(tt) if (n %% 2 > 0) { ## Take care of remainder m <- sample(n,1) result$remainder <- c(result$remainder,tt[m]) tt <- tt[-m] n <- n-1 } if (n>0) { m <- sample(n,n/2) result$formA <- c(result$formA,tt[m]) result$formB <- c(result$formB,tt[-m]) } } else { for (sub in tt) { result <- splitTaskTreeAux(sub,result) } rem <- result$remainder result$remainder <- character() result <- splitTaskTreeAux(rem,result) } result }