Thanks Bill, This one will work perfectly, the others required an existing matrix to be modified, which isn't the case (I'm using this xyz function in a larger construct). Plus it's only a 12x12, so not too big on memory. Thank you! Stu
On 11 Mar 2009, at 6:34 PM, <bill.venab...@csiro.au> wrote: > > This is horrible on memory if you are dealing with large matrices. > > Here is a slightly more slick version of the function I have already > posted: > > > xyz <- function (v, k) { > n <- length(v) + abs(k) > x <- matrix(0, n, n) > i <- (1 - min(0, k)):(n - max(0,k)) > j <- (1 + max(0, k)):(n + min(0,k)) > x[cbind(i,j)] <- v > x > } > > The point of this is that it does not hold three copies of the > matrix in memory at once (x, row(x) and col(x)). It uses the matrix > index idea instead. > > If you were going to be doing this a lot, you would be better > writing a function `Diag<-`, say, which places a vector at a > specified diagonal position of a given matrix. This is an easy > exercise for the reader! > > > Bill Venables > http://www.cmis.csiro.au/bill.venables/ > > > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org > ] On Behalf Of Sundar Dorai-Raj > Sent: Thursday, 12 March 2009 10:00 AM > To: Stu Field > Cc: r-help@r-project.org > Subject: Re: [R] Matrix Construction; Subdiagonal > > You can always write your own function: > > myDiag <- function(x, vec, k) { > x[row(x) == col(x) - k] <- vec > x > } > > myDiag(A, vec, -1) > > Of course, you should probably do some input checking too. > > --sundar > > On Wed, Mar 11, 2009 at 4:57 PM, Stu Field <s...@colostate.edu> wrote: >> Sure, that'll work fine, thanks. >> But I guess I was looking for something more similar to MatLab, I'm >> really >> surprised R doesn't have a preset command for this (?) >> Thanks again, >> Stu >> On 11 . Mar . 2009, at 5:49 PM, Sundar Dorai-Raj wrote: >> >> Does this help? >> >> A <- matrix(0, 6, 6) >> vec <- 1:5 >> A[row(A) == col(A) + 1] <- vec >> >> --sundar >> >> On Wed, Mar 11, 2009 at 4:42 PM, Stu Field <s...@colostate.edu> wrote: >> >> I'm trying to enter a vector into the subdiagonal of a matrix but >> >> cannot find a command in R which corresponds to the MatLab version of >> >> diag(vec, k), where vec = the vector of interest, and k = the >> diagonal >> >> (k=0 for the diagonal; k=-1 for the subdiagonal; k=1 for >> >> superdiagonal, etc.) >> >> Is there an equivalent command in R? >> >> I'm looking for something like this: >> >> vec = seq(1, 5, 1) # vector of interest >> >> A = xyz(vec,-1) # creates a 6x6 matrix with vec on the >> >> subdiagonal >> >> where xyz is some function similar to diag, but with differing >> >> arguments. >> >> I can't believe there is not a simple way to do this... >> >> Thanks for your help, >> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> Stu Field, PhD >> >> Postdoctoral Fellow >> >> Department of Biology >> >> Colorado State University >> >> 1878 Campus Delivery >> >> Fort Collins, CO 80523-1878 >> >> Office: E208 Anatomy/Zoology >> >> Phone: (970) 491-5744 >> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> >> >> >> >> [[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. >> >> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> Stu Field, PhD >> Postdoctoral Fellow >> Department of Biology >> Colorado State University >> 1878 Campus Delivery >> Fort Collins, CO 80523-1878 >> Office: E208 Anatomy/Zoology >> Phone: (970) 491-5744 >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> >> >> > > ______________________________________________ > 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. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Stu Field, PhD Postdoctoral Fellow Department of Biology Colorado State University 1878 Campus Delivery Fort Collins, CO 80523-1878 Office: E208 Anatomy/Zoology Phone: (970) 491-5744 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [[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.