"Csim.go" <- function(sim,assoc,ont="BP",organism="yeast",sim.method="lin",thresh=0) { if(!(is.matrix.csr(sim) || is.matrix(sim)) || (nrow(sim) != ncol(sim)) || (nrow(sim)==0)) stop("Invalid sim matrix") if(!is.list(assoc) || (length(assoc) != nrow(sim)) || !is.character(unlist(assoc))) stop("Invalid assoc list") if(!(ont %in% c("BP","MF","CC"))) stop("Invalid ontology (must be one of 'BP','MF', or 'CC')") if(!(organism %in% c("yeast","human","mouse","rat"))) stop("Invalid organism (must be one of 'yeast','human','mouse', or 'rat')") if(!(sim.method %in% c("lin","resnik","jiang"))) stop("Invalid similarity method (must be one of 'lin','resnik', or 'jiang')") if(!is.numeric(thresh) || is.null(thresh) || is.na(thresh) || (thresh<0)) stop("Threshold similarity must be a numeric >= 0") pc.name <- paste("go",ont,"pc.",organism,sep="") if(is.null(tryCatch(data(list=pc.name,package="mBison"),warning=function(w) NULL)) && !exists(pc.name) && is.null(tryCatch(load(paste(pc.name,".RData",sep="")),error=function(e) NULL))) stop("Concept probability list ",pc.name," not found") expr <- paste("goPC <- ",pc.name,sep="") eval(parse(text=expr)) pms.name <- paste("go",ont,"pms.",organism,sep="") if(is.null(tryCatch(data(list=pms.name,package="mBison"),warning=function(w) NULL)) && !exists(pms.name) && is.null(tryCatch(load(paste(pms.name,".RData",sep="")),error=function(e) NULL))) stop("Minimum subsumer probability matrix ",pms.name," not found") expr <- paste("goPMS <- ",pms.name,sep="") eval(parse(text=expr)) if(nrow(sim)==1) return(as.matrix.csr(0,nrow(sim),ncol(sim))) sim <- .Call("Csim_go",assoc,goPC,goPMS,sim.method,thresh,PACKAGE="mBison") rm(goPC,goPMS) gc(FALSE) sim <- as.matrix.csr(sim) gc(FALSE) sim <- sim+t(sim) gc(FALSE) return(sim) }