https://github.com/cran/pracma
Raw File
Tip revision: 392ae21a013fb3f518e8f9eb8efb458a55a2eca2 authored by HwB on 09 April 2011, 00:00:00 UTC
version 0.3-0
Tip revision: 392ae21
mdiag.R
##
##  m d i a g . R  Matrix diagonal
##


mdiag <- function(x, k=0) {
	if (!is.numeric(x) && !is.complex(x))
		stop("Argument 'x' must be a real or complex vector or matrix.")
	if (!is.numeric(k) || k != round(k))
		stop("Argument 'k' must be an integer.")

	if (length(x) == 1) return(x)
	if (is.matrix(x)) {
		n <- nrow(x); m <- ncol(x)
		if (k >= m || -k >= n) {
			y <- matrix(0, nrow=0, ncol=0)
		} else {
			y <- x[col(x) == row(x) + k]
		}
	} else {
		if (is.vector(x)) {
			n <- length(x)
			m <- n + abs(k)
			y <- matrix(0, nrow=m, ncol=m)
			y[col(y) == row(y) + k] <- x
		} else {
			stop("Argument 'x' must be a real or complex vector or matrix.")
		}
	}
	return(y)
}
back to top