useRs,

Using a code suggestion from the previous post in this thread (quoted
next), I was able to work through a smaller example problem and get some
results I was aiming for.

>That might not construct the bands in the blocks correctly: This might
>be better:
>
>MAT [ kronecker( matrix(1, 4,4), abs( col(Mat)-row(Mat) ) > 5,
>FUN="&" ) ] <- 0

With this working example in hand, I tried applying the R code to the larger
problem but ran into 'allocate' error.  The small working example (next) is
followed by the larger problem that kicks back an error message.  I'm
hopeful someone may know of a work-around for avoiding the allocate error?

##Small example
Mat <- matrix( 1:(4*4), 4, 4)
test <- rbind(Mat, Mat)
test2<- cbind(test,test)
#test2 is a 8x8 matrix with 4 4x4 sub-matrices

#The following preserves the diagonal bands I want to keep (has TRUE where
desired)
edm<-!kronecker( matrix(1, 4,4), abs( col(Mat)-row(Mat) ) > 1, FUN="&" )

#However, the size was doubled in the above, so here I keep only that portion
that is the same size as test2
edm<-edm[1:8,1:8]

#The following retains the values I'm interested in.
test3<-ifelse(edm,test2,0)

##Repeat the process on the larger problem which contains 16 365 x 365
submatrices
Mat <- matrix( 1:(365*365), 365, 365)
test <- rbind(Mat, Mat, Mat, Mat)
test2<- cbind(test,test,test,test)

edm<-!kronecker( matrix(1, 365,365), abs( col(Mat)-row(Mat) ) > 1, FUN="&" )
#Error: cannot allocate vector of size 4.2 Gb
edm<-edm[1:1460,1:1460]

Is there a way around this?

Thanks, Eric

On Wed, Jan 23, 2013 at 11:32 PM, David Winsemius <dwinsem...@comcast.net>wrote:

>
> On Jan 23, 2013, at 5:31 PM, David Winsemius wrote:
>
>
>> On Jan 23, 2013, at 7:13 AM, emorway wrote:
>>
>>  The following 1460 x 1460 matrix can be throught of as 16 distinct 365 x
>>> 365
>>> matrices.  I'm trying to set off-diaganol terms in the 16 sub-matrices
>>> with
>>> indices more than +/- 5 (days) from each other to zero using some for
>>> loops.
>>> This works well for some, but not all, of the for loops.  The R code I"m
>>> using follows.  For some reason the third loop below zero's-out
>>> everything
>>> in the sub-quadrant it is targeting, which is readily observable when
>>> viewing the matrix ("View(MAT)").
>>>
>>> library(Matrix)
>>> MAT<-matrix(rnorm(1460*1460,**mean=0,sd=1),nrow = 1460, ncol = 1460)
>>>
>>>
>> The way to do that in a single 365 x 365 matrix is:
>>
>> Mat <- matrix( 1:(365*365), 365, 365)
>> Mat[ abs( col(Mat)-row(Mat) ) > 5 ] <- 0
>> Mat
>>
>> The way to propagate that pattern is to use rep(), so here is a one-liner
>> for the task:
>>
>> MAT[ rep( abs( col(Mat)-row(Mat) ) > 5, 16) ] <- 0
>>
>
> That might not construct the bands in the blocks correctly: This might be
> better:
>
> MAT [ kronecker( matrix(1, 4,4), abs( col(Mat)-row(Mat) ) > 5, FUN="&" ) ]
> <- 0
>
> --
> David.
>
>
>>
>> Didn't test on you gigantuan matrix;  used smaller example:
>>
>> Mat <- matrix( 1:(16*16), 16, 16)
>> test <- rbind(Mat, Mat)
>> test[rep( abs( col(Mat)-row(Mat) ) > 2 , 2)] <- 0
>> test
>>
>> --
>> David.
>>
>>
>>  #works great
>>> for (i in 1:365) {
>>> SEQ <- (i - 5):(i + 5)
>>> SEQ <- SEQ[SEQ > 0 & SEQ < 366]
>>> MAT[(1:365)[-SEQ], i] <- 0
>>> }
>>>
>>> #works great
>>> for (i in 1:365) {
>>> SEQ <- (i - 5):(i + 5)
>>> SEQ <- SEQ[SEQ > 0 & SEQ < 366]
>>> MAT[(1:365)[-SEQ], i + 365] <- 0
>>> }
>>>
>>> #zero's out everything, including main-diagonal and near-main-diagonal
>>> terms???
>>> for (i in 731:1095) {
>>> SEQ <- (i - 5):(i + 5)
>>> SEQ <- SEQ[SEQ > 730 & SEQ < 1096]
>>> MAT[(731:1095)[-SEQ], i + 365] <- 0
>>> }
>>>
>>> View(MAT)
>>>
>>> I'm not sure why the third FOR loop above is not leaving the
>>> main-diagonal
>>> and near-main-diagonal terms alone?
>>>
>>>
>>>
>>> --
>>> View this message in context: http://r.789695.n4.nabble.com/**
>>> setting-off-diagonals-to-zero-**tp4656407.html<http://r.789695.n4.nabble.com/setting-off-diagonals-to-zero-tp4656407.html>
>>> Sent from the R help mailing list archive at Nabble.com.
>>>
>>> ______________________________**________________
>>> R-help@r-project.org mailing list
>>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>> PLEASE do read the posting guide http://www.R-project.org/**
>>> posting-guide.html <http://www.R-project.org/posting-guide.html>
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>> David Winsemius
>> Alameda, CA, USA
>>
>> ______________________________**________________
>> R-help@r-project.org mailing list
>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>> PLEASE do read the posting guide http://www.R-project.org/**
>> posting-guide.html <http://www.R-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> David Winsemius, MD
> Alameda, CA, USA
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to