[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
Wed May 9 00:17:01 CEST 2007


thanks anders : that works perfectly. I'll have to study it better to
understand but it's much appreciated.
 

-----Original Message-----
From: Anders Nielsen [mailto:andersn at hawaii.edu] 
Sent: Tuesday, May 08, 2007 5:55 PM
To: Leeds, Mark (IED)
Cc: r-help at stat.math.ethz.ch
Subject: Re: [R] Looking for a cleaner way to implement a setting
certain indices of a matrix to 1 function

Hi Mark, 

Is this of any help?

  resMat<-function(K=6,lag=2,ncol=3*K){
    X<-matrix(0,K,ncol)
    X[,1:(K*lag)]<-diag(K)
    return(X)
  } 

Cheers, 

Anders. 

On Tuesday 08 May 2007 11:21 am, Leeds, Mark (IED) wrote:
> 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}}



More information about the R-help mailing list