https://github.com/cran/pracma
Tip revision: 708a2ad382a163d1eef5af0665e3ae2aad200ced authored by HwB on 21 March 2013, 00:00:00 UTC
version 1.4.5
version 1.4.5
Tip revision: 708a2ad
diag.R
##
## d i a g . R Matrix diagonal
##
Diag <- 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)
}