Mercurial > repos > fabio > iwtomics
diff plotwithscale.R @ 83:f81d72e482cf draft
Uploaded
author | fabio |
---|---|
date | Fri, 06 Oct 2017 11:06:44 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plotwithscale.R Fri Oct 06 11:06:44 2017 -0400 @@ -0,0 +1,117 @@ +if (require("IWTomics",character.only = TRUE,quietly = FALSE)) { + args=commandArgs(TRUE) + + # get args names and values + args_values=strsplit(args,'=') + args_names=unlist(lapply(args_values,function(arg) arg[1])) + names(args_values)=args_names + args_values=lapply(args_values,function(arg) arg[2]) + # read filenames + adjustedpvalue=args_values$adjustedpvalue + iwtomicsrespdf=args_values$iwtomicsrespdf + iwtomicssumpdf=args_values$iwtomicssumpdf + iwtomicsrdata=args_values$iwtomicsrdata + iwtomicstests=args_values$iwtomicstests + iwtomicsselectedfeatures=args_values$iwtomicsselectedfeatures + test_subset=paste0('c(',strsplit(args_values$test_subset,'\\|')[[1]],')') + feature_subset=paste0('c(',strsplit(args_values$feature_subset,'\\|')[[1]],')') + # read parameters (from test_subset on) + i_scale_subset=which(args_names=='scale_subset') + for(i in i_scale_subset:length(args)){ + eval(parse(text=args[[i]])) + } + + # load RData + load(iwtomicsrdata) + # read testids and featureids and check them + unlisted=lapply(seq_along(test_subset), + function(i){ + test_subset_i=eval(parse(text=test_subset[i])) + feature_subset_i=eval(parse(text=feature_subset[i])) + test_subset_i=rep(test_subset_i,each=length(feature_subset_i)) + feature_subset_i=rep(feature_subset_i,length.out=length(test_subset_i)) + scale_subset_i=rep(scale_subset[i],length(test_subset_i)) + return(list(test_subset=test_subset_i,feature_subset=feature_subset_i,scale_subset=scale_subset_i)) + }) + test_subset=unlist(lapply(unlisted,function(l) l$test_subset)) + feature_subset=unlist(lapply(unlisted,function(l) l$feature_subset)) + scale_subset=unlist(lapply(unlisted,function(l) l$scale_subset)) + testids=as.character(read.delim(iwtomicstests,header=FALSE,sep='\t',stringsAsFactors=FALSE)) + featureids=as.character(read.delim(iwtomicsselectedfeatures,header=FALSE,sep='\t',stringsAsFactors=FALSE)) + id_features_subset=featureids[feature_subset] + if(sum(testids!=paste(testInput(regionsFeatures_test)$id_region1,'vs',testInput(regionsFeatures_test)$id_region2))){ + write("Wrong test ids.", stderr()) + quit(save="no", status=10) + } + if(sum(featureids!=idFeatures(regionsFeatures_test))){ + write("Wrong feature ids.", stderr()) + quit(save="no", status=20) + } + # retrieve test and features_subset ids + id_features_subset=featureids[feature_subset] + if(sum(duplicated(paste0(test_subset,id_features_subset)))){ + write("Two scale thresholds selected for the same test and feature.", stderr()) + quit(save="no", status=30) + } + # If scale_subset=0, do not change the threshold + default=(scale_subset==0) + scale_subset=scale_subset[!default] + test_subset=test_subset[!default] + id_features_subset=id_features_subset[!default] + + # get scale threshold + scale_threshold=lapply(regionsFeatures_test@test$result, + function(result) unlist(lapply(result,function(feature) feature$max_scale))) + for(i in seq_along(test_subset)){ + if(scale_threshold[[test_subset[i]]][id_features_subset[i]]<scale_subset[i]){ + write("Scale threshold too high.", stderr()) + quit(save="no", status=40) + } + scale_threshold[[test_subset[i]]][id_features_subset[i]]=scale_subset[i] + } + + # create adjustedvalue output + pval=adjusted_pval(regionsFeatures_test,scale_threshold=scale_threshold) + for(test in seq_along(pval)){ + for(id_feature in idFeatures(regionsFeatures_test)){ + write(paste0('Test: ',testids[test],', on feature ',id_feature), + file=adjustedpvalue,append=TRUE,sep='\t') + pval_i=as.data.frame(t(pval[[test]][[id_feature]])) + row.names(pval_i)=paste('Scale',scale_threshold[[test]][[id_feature]]) + write.table(pval_i,file=adjustedpvalue,append=TRUE,sep='\t',quote=FALSE,row.names=TRUE,col.names=FALSE) + write('',file=adjustedpvalue,append=TRUE,sep='\t') + } + } + + + # plot test results + pdf(iwtomicsrespdf,width=5,height=7) + if(plottype=='boxplot'){ + # fix repeated probs + probs=sort(unique(probs)) + }else{ + probs=c(0.25,0.5,0.75) + } + plotTest(regionsFeatures_test,alpha=testalpha,type=plottype,probs=probs,average=average,size=size,scale_threshold=scale_threshold,ask=FALSE) + dev.off() + + # plot summary results + if(groupby!='none'){ + tryCatch({ + pdf(iwtomicssumpdf,width=15,height=10) + plotSummary(regionsFeatures_test,alpha=summaryalpha,only_significant=only_significant,groupby=groupby,scale_threshold=scale_threshold,ask=FALSE,append=TRUE) + dev.off() + }, error = function(err) { + if (grepl('selected features with different resolution',err$message)) { + write("Group by 'test' but selected features with different resolution.", stderr()) + quit(save="no", status=50) #error: groupby 'test' but selected features with different resolution. + } + write("Summary plot error. Please try again.", stderr()) + quit(save="no", status=60) #error + }) + } + +}else{ + write("Missing IWTomics package. Please be sure to have it installed before using this tool.", stderr()) + quit(save="no", status=255) +} \ No newline at end of file