当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R diag 矩阵对角线


R语言 diag 位于 base 包(package)。

说明

提取或替换矩阵的对角线,或构造对角矩阵。

用法

diag(x = 1, nrow, ncol, names = TRUE)
diag(x) <- value

参数

x

矩阵、向量或一维 array ,或缺失。

nrow , ncol

x 不是矩阵时结果的可选维度。

names

(当 x 是矩阵时)逻辑指示结果向量(x 的对角线)是否应从 dimnames(x) 继承 names(如果可用)。

value

单个值或长度等于当前对角线长度的向量。应该是可以强制为 x 的模式。

细节

diag 有四种不同的用法:

  1. x是一个矩阵,当它提取对角线时。

  2. 缺少 x 且指定了 nrow,它返回一个单位矩阵。

  3. x 是一个标量(长度为一个向量),也是唯一的参数,它返回一个大小由标量给定的方单位矩阵。

  4. x 是 ‘numeric’ ( complexnumericintegerlogicalraw )向量,长度至少为 2 或者还有其他参数。这将返回一个具有给定对角线和零非对角线条目的矩阵。

在第一种情况下指定nrowncol 是错误的。

如果 x 是矩阵,则 diag(x) 返回 x 的对角线。如果 names 为 true 并且矩阵 x 具有匹配的列名和行名,则生成的向量将具有 names

替换形式将矩阵 x 的对角线设置为给定值。

在所有其他情况下,该值是具有 nrow 行和 ncol 列的对角矩阵(如果未给出 ncol,则矩阵为方阵)。这里 nrow 如果指定则从参数中获取,否则从 x 推断:如果它是长度为 2 或更多的向量(或一维数组),则其长度为行数,但如果它的长度为1 并且 nrowncol 均未指定, nrow = as.integer(x)

当返回对角矩阵时,对角线元素都是 1,除了第四种情况,当 x 给出对角线元素时:它将根据需要回收或截断,但小数回收和截断会给出警告。

注意

如果 x 是长度为 1 的向量,则使用 diag(x) 可能会产生意想不到的效果。使用 diag(x, nrow = length(x)) 以获得一致的行为。

例子

dim(diag(3))
diag(10, 3, 4) # guess what?
all(diag(1:3) == {m <- matrix(0,3,3); diag(m) <- 1:3; m})

## other "numeric"-like diagonal matrices :
diag(c(1i,2i))    # complex
diag(TRUE, 3)     # logical
diag(as.raw(1:3)) # raw
(D2 <- diag(2:1, 4)); typeof(D2) # "integer"

require(stats)
## diag(<var-cov-matrix>) = variances
diag(var(M <- cbind(X = 1:5, Y = rnorm(5))))
#-> vector with names "X" and "Y"
rownames(M) <- c(colnames(M), rep("", 3))
M; diag(M) #  named as well
diag(M, names = FALSE) # w/o names

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

upper.trilower.trimatrix

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Matrix Diagonals。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。