[R] Matrix Construction; Subdiagonal

Bill.Venables at csiro.au Bill.Venables at csiro.au
Thu Mar 12 01:08:39 CET 2009

Why should there be a simple way?  R is not primarily a matrix language.

Perhaps this will help:

xyz <- function (v, k) {
    n <- length(v) + abs(k)
    x <- matrix(0, n, n)
    if (k == 0) 
        diag(x) <- v
    else if (k < 0) 
    { ## sub-diagonal
        j <- 1:(n+k)
        i <- (1 - k):n
        x[cbind(i, j)] <- v
    } else 
    { ## super-diagonal
        i <- 1:(n-k)
        k <- (1 + k):n
        x[cbind(i, j)] <- v

modify, extend, simplify, ... as you wish.

Bill Venables. 

Bill Venables

-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Stu Field
Sent: Thursday, 12 March 2009 9:43 AM
To: r-help at r-project.org
Subject: [R] Matrix Construction; Subdiagonal

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  
where xyz is some function similar to diag, but with differing  

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 at r-project.org mailing list
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list