[R] Looking for a cleaner way to implement a setting certainindices of a matrix to 1 function

jim holtman jholtman at gmail.com
Tue May 8 23:55:08 CEST 2007


Is this what you want?

> n <- 6
> lagnum <- 2
> result <- NULL
> for (i in 1:lagnum)  result <- cbind(result, diag(n))
> result
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,]    1    0    0    0    0    0    1    0    0     0     0     0
[2,]    0    1    0    0    0    0    0    1    0     0     0     0
[3,]    0    0    1    0    0    0    0    0    1     0     0     0
[4,]    0    0    0    1    0    0    0    0    0     1     0     0
[5,]    0    0    0    0    1    0    0    0    0     0     1     0
[6,]    0    0    0    0    0    1    0    0    0     0     0     1
>
>


On 5/8/07, Leeds, Mark (IED) <Mark.Leeds at morganstanley.com> wrote:
> That's a good idea : I didn't realize that my matrices would look so bad
> in the final email. All I want
> To do is output 1's in the diagonal elements and zero's everywhere else
> but the matrix is not square so by diagonals I
> Really mean if
>
> Lagnum = 1 then the elements are (1,1), (2,2), (3,3),(4,4),(5,5),(6,6)
>
> Lagnum = 2 then the elements (1,1), (2,2),
> (3,3),(4,4),(5,5),(6,6),(7,1),(8,2),(9,3),(10,4),(11,5),(12,6)
>
> Lagnum = 3 then the elements (1,1), (2,2),
> (3,3),(4,4),(5,5),(6,6),(7,1),(8,2),(9,3),(10,4),(11,5),(12,6),(13,1),(1
> 4,2),(15,3),(16,4),(17,5),
> (18,6)
>
> And lagnum always has to be greater than or equal to 1 and less than or
> equal to (number of cols/number of rows ). Thanks
> For your advice.
>
>
> -----Original Message-----
> From: Bert Gunter [mailto:gunter.berton at gene.com]
> Sent: Tuesday, May 08, 2007 5:34 PM
> To: Leeds, Mark (IED); r-help at stat.math.ethz.ch
> Subject: RE: [R] Looking for a cleaner way to implement a setting
> certainindices of a matrix to 1 function
>
> Suggestion:
>
> You might make it easier for folks to help if you explained in clear and
> simple terms what you are trying to do. Code is hard to deconstruct.
>
>
> Bert Gunter
> Genentech Nonclinical Statistics
>
>
> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Leeds, Mark (IED)
> Sent: Tuesday, May 08, 2007 2:22 PM
> To: r-help at stat.math.ethz.ch
> Subject: [R] Looking for a cleaner way to implement a setting
> certainindices of a matrix to 1 function
>
> 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}}
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
> --------------------------------------------------------
>
> This is not an offer (or solicitation of an offer) to buy/se...{{dropped}}
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
>


-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?



More information about the R-help mailing list