The other solutions offered are perfectly workable. Here is a strategy that is generalizable to other matrix designs (and on checking the source of upper.tri and lower.tri, it's not surprising that they use precisely the same strategy):

n <- 9
dm <- matrix(0, nrow=n, ncol=n)

dm[col(dm) >= row(dm)] <- 1

If you wanted only upper off-diagonal -1's, for instance, you could use instead:

dm[col(dm) == (row(dm)+1) ] <- -1

--
David Winsemius

On Feb 11, 2009, at 4:22 PM, Dale Steele wrote:

The code below create an nxn upper triangular matrix of one's.  I'm
stuck on finding a more efficient vectorized way - Thanks.  --Dale

n <- 9
data <- matrix(data=NA, nrow=n, ncol=n)
data
for (i in 1:n) {
   data[,i] <- c(rep(1,i), rep(0,n-i))
}
data

______________________________________________
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.

______________________________________________
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