edge_randomization = function(path2genrev, g, te, a, keep.random.file=FALSE, nperm = 1000, n=NA, L=NA, it=NA, search_d=NA, search_r=NA, s=NA, cl=NA, output.dir=NA, output.RData = NA){ ### initialization of parameters path2generev = NA network.file = NA seed.file = NA method = NA node.score.file = NA walk_len = NA walk_iterN = NA shrink_d = NA mcl_status = NA if(!is.na(g)) { network.file = g } else {print("Please provide ");} if(!is.na(te)) { seed.file = te } else {print("Please provide ");} if(!is.na(a)) { method = a } else {print("Please specify method, one of ('heuristic', 'steiner', 'kwalk')");} if(!is.na(n)) { node.score.file = n } if(!is.na(L)) { walk_len = L } if(!is.na(it)) { walk_iterN = it } if(!is.na(s)) { shrink_d = s } if(!is.na(cl)) { mcl_status = cl } ### initialization of cmd basic.cmd = paste(path2genrev, "/GenRev", sep="") if(!is.na(node.score.file)) { basic.cmd = paste(basic.cmd, " -n ", node.score.file, sep="") } if(!is.na(seed.file)) { basic.cmd = paste(basic.cmd, " -t ", seed.file, sep="") } if(!is.na(shrink_d)) { basic.cmd = paste(basic.cmd, " -s ", shrink_d, sep="") } if(method=="steiner") { basic.cmd = paste(basic.cmd, " -a ", method, sep="") } else if(method=="heuristic") { basic.cmd = paste(basic.cmd, " -a ", method, sep="") if(!is.na(search_d)){basic.cmd = paste(basic.cmd, " -d ", search_d, sep="")} if(!is.na(search_r)){basic.cmd = paste(basic.cmd, " -r ", search_r, sep="")} } else if(method=="heuristic") { basic.cmd = paste(basic.cmd, " -a ", method, sep="") if(!is.na(walk_len)){basic.cmd = paste(basic.cmd, " -L ", walk_len, sep="")} if(!is.na(walk_iterN)){basic.cmd = paste(basic.cmd, " -it ", walk_iterN, sep="")} } if(!is.na(mcl_status)) { basic.cmd = paste(basic.cmd, " -cl ", mcl_status, sep="") } ### cmd for real case real.cmd = paste(basic.cmd, " -g ", network.file, sep="") if(!is.na(output.dir)) { real.cmd = paste(real.cmd, " -o ", output.dir, sep="") if(grepl("/$", output.dir)){output.dir = substr(output.dir, 0, nchar(output.dir)-1)} ### remove "/" at the end of ourput.dir } else { output.dir = paste(getwd(), "/", format(Sys.time(), "%Y%b%d%H%M"), sep="") real.cmd = paste(real.cmd, " -o ", output.dir, sep="") } print(real.cmd) system(real.cmd) real.gene.ranks = read.table(paste(output.dir, "/gene_rank.txt", sep="")) real.gene.ranks = as.character(real.gene.ranks[,1]) ### randomization library(igraph) network = read.table(network.file) G = graph.data.frame(network, directed=F) G = simplify(G) edge.list = get.edgelist(G) if(keep.random.file==FALSE) { random.gene.rank = list() print(paste("Warning: intermediate files of randomization process will be lost! However, the randomized reference network files are saved!")) for(ii in 1:nperm) { if(file.exists(paste(output.dir, "_random/", sep="")))unlink(paste(output.dir, "_random/", sep=""), recursive=T) edges.random = edge.list apply(edges.random, 1, function(u){paste(u[1], u[2], sep="--")}) -> edges.str seq(1:dim(edges.random)[[1]]) -> all.idx edges.random = cbind(edge.list[,1], edge.list[sample(all.idx),2]) random.network.file = paste(output.dir, "/random",ii,".network.txt", sep="") write.table(edges.random, file=random.network.file, row.names=F, col.names=F, quote=F, sep="\t") ### cmd for random case random.cmd = paste(basic.cmd, " -g ", random.network.file, sep="") random.output.dir = paste(output.dir, "_random/", sep="") random.cmd = paste(random.cmd, " -o ", random.output.dir, sep="") print(random.cmd) system(random.cmd) random.term = read.table(file=paste(output.dir, "_random/gene_rank.txt", sep="")) random.gene.rank[[ii]] = as.character(random.term[,1]) cat(paste("finish round ", ii, "\n", sep="")) } } else if(keep.random.file==TRUE) { print(paste("Warning: a large number of folders will be generated for randomization purpose!")) random.gene.rank = list() for(ii in 1:nperm) { if(file.exists(paste(output.dir, "_random_", ii, sep="")))unlink(paste(output.dir, "_random_", ii, sep=""), recursive=T) edges.random = edge.list apply(edges.random, 1, function(u){paste(u[1], u[2], sep="--")}) -> edges.str seq(1:dim(edges.random)[[1]]) -> all.idx edges.random = cbind(edge.list[,1], edge.list[sample(all.idx),2]) random.network.file = paste(output.dir, "/random",ii,".network.txt", sep="") write.table(edges.random, file=random.network.file, row.names=F, col.names=F, quote=F, sep="\t") random.cmd = paste(basic.cmd, " -g ", random.network.file, sep="") random.output.dir = paste(output.dir, "_random_", ii, sep="") random.cmd = paste(random.cmd, " -o ", random.output.dir, sep="") print(random.cmd) system(random.cmd) random.term = read.table(file=paste(output.dir, "_random_", ii, "/gene_rank.txt", sep="")) random.gene.rank[[ii]] = as.character(random.term[,1]) cat(paste("finish round ", ii, "\n", sep="")) } } if(is.na(output.RData)){ save(random.gene.rank, file="random.test.RData") } else { save(random.gene.rank, file=output.RData) } } #randomization(getwd(), network.file="/mnt/BSBL_2T/home/pjia/DATA/pina_symbol11242010.ppi", seed.file="Aaron/priorGenes151_pureGene.txt", method="steiner")