[R] Looking for a cleaner way to implement a setting certain indices of a matrix to 1 function
Leeds, Mark (IED)
Mark.Leeds at morganstanley.com
Tue May 8 23:21:50 CEST 2007
I wrote an ugly algorithm to set certain elements of a matrix to 1
without looping and below works and you can see what
The output is below the code.
K<-6
lagnum<-2
restrictmat<-matrix(0,nrow=K,ncol=K*3)
restrictmat[((col(restrictmat) - row(restrictmat) >= 0 ) &
(col(restrictmat)-row(restrictmat)) %% K == 0)]<-1
restrictmat[,(lagnum*K+1):ncol(restrictmat)]<-0
restrictmat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[,13] [,14] [,15] [,16] [,17] [,18]
[1,] 1 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0
[4,] 0 0 0 1 0 0 0 0 0 1 0 0
0 0 0 0 0 0
[5,] 0 0 0 0 1 0 0 0 0 0 1 0
0 0 0 0 0 0
[6,] 0 0 0 0 0 1 0 0 0 0 0 1
0 0 0 0 0 0
For lagnum equals 1 , it also works :
restrictmat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[,13] [,14] [,15] [,16] [,17] [,18]
[1,] 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
[4,] 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0
[5,] 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0
[6,] 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0
But I am thinking that there has to be a better way particularly because
I'll get an error if I set lagnum to 3.
Any improvements or total revampings are appreciated. The number of
columns will always be a multiple of the number of rows
So K doesn't have to be 6. that was just to show what the commands do.
thanks.
--------------------------------------------------------
This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}
More information about the R-help
mailing list