[R] efficient matrix element comparison

Nikhil Kaza nikhil.list at gmail.com
Mon Aug 9 04:17:00 CEST 2010


How about

a <- which(row(matchM)!=matchM)
b <- matchM[a]
diag(collusionM[a,b]) <-1


Nikhil Kaza
Asst. Professor,
City and Regional Planning
University of North Carolina

nikhil.list at gmail.com

On Aug 8, 2010, at 8:43 PM, david h shanabrook wrote:

> It is a simple problem in that I simply want to convert the For loop  
> to a more efficient method.  It simply loops through a large vector  
> checking if the numeric element is not equal to the index of that  
> element.  The following example demonstrates a simplified example:
>
>> rows <- 10
>> collusionM <- Matrix(0,10,10,sparse=TRUE)
>> matchM <- matrix(c(1,2,3,4,4,6,7,9,9,10))
>>
>> for (j in 1:rows) if (j != matchM[j]) collusionM[j,matchM[j]] <-  
>> collusionM[j,matchM[j]]+1
>> collusionM
> 10 x 10 sparse Matrix of class "dgCMatrix"
>
> [1,] . . . . . . . . . .
> [2,] . . . . . . . . . .
> [3,] . . . . . . . . . .
> [4,] . . . . . . . . . .
> [5,] . . . 1 . . . . . .
> [6,] . . . . . . . . . .
> [7,] . . . . . . . . . .
> [8,] . . . . . . . . 1 .
> [9,] . . . . . . . . . .
> [10,] . . . . . . . . . .
>
> Again, this works, I just need the for loop to be more efficient as  
> in my application rows=37000, and I need to do this 100 times.
>
> Thanks.
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list