[R] recursive function - finding connections

Benton, Paul hpaul.benton08 at imperial.ac.uk
Thu Jul 14 08:53:32 CEST 2011


Dear all,

I'm having some problems getting my recursive function to work. At first I though that maybe my data was too big and I increase option(expressions=50000). Then I thought that I would try it on some smaller data. Still not working. :( 
I would have thought there should be a function for this already, so any suggestions are welcomed for other methods. I did try igraph but couldn't get cliques() to give anything useful. Also a quick play with hclust and cut, again nothing too useful.

Basically the function is trying to find uniquely connected subgraphs. So the sub-network is only connected by itself and not to other nodes. If everything is connected then the list (connectedList) should be length of 1 and have every index in the 1st slot.

cheers,

Paul


findconnection<-function(mat, cutoff){
	toList<-function(mat, connectList, cutoff, i, idx){
		idx<-which(mat[,idx] < cutoff)
		if(length(idx) >= 1){
			connectList[[i]]<-idx
			for(z in 1:length(idx)){
				connectList<-toList(mat, connectList, cutoff, i, idx[z])
			}
		}else{
			return(connectList)
		}
	}
	
	connectList<-list()
	for(i in 1:ncol(mat)){
		connectList<-toList(mat, connectList, cutoff, i, i)
	}
	return(unique(connectList)) 
}

foomat<-matrix(sample(c(1,0.5,0), 100, replace=T), nrow=10) ## example data
> foomat
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]  0.0  0.5  0.0  0.5  0.5  0.0  0.5  1.0  0.5   0.0
 [2,]  0.0  1.0  1.0  0.0  0.0  1.0  0.0  1.0  0.5   1.0
 [3,]  1.0  1.0  1.0  1.0  0.5  0.0  0.5  0.5  0.5   0.5
 [4,]  0.0  0.5  0.0  0.0  0.5  0.5  0.5  0.0  1.0   0.0
 [5,]  0.5  0.5  1.0  1.0  0.5  1.0  1.0  0.5  0.5   0.5
 [6,]  0.0  0.5  0.0  0.5  0.5  0.5  0.5  0.5  1.0   1.0
 [7,]  1.0  1.0  0.0  1.0  0.0  0.5  1.0  1.0  0.5   0.5
 [8,]  0.5  1.0  0.0  0.5  1.0  0.0  1.0  0.0  0.0   0.0
 [9,]  0.0  0.5  0.0  0.0  0.5  0.0  0.5  0.0  0.5   0.5
[10,]  1.0  1.0  0.5  1.0  0.0  1.0  0.0  0.0  0.0   0.5
> pb<-findconnection(foomat, 0.01)
Error: C stack usage is too close to the limit
Error during wrapup: 



More information about the R-help mailing list