对于R中的对角矩阵,将0替换为1,反之亦然

时间:2010-07-16 02:21:11

标签: r

任何人都可以告诉我如何用1代替0和反之亦然代替R中的对角矩阵。

3 个答案:

答案 0 :(得分:14)

如果您的矩阵是mat并且您想将所有1翻转为0 ...

mat <- 1-mat

答案 1 :(得分:0)

我对R一无所知,但似乎你可以解决这样的矩阵:
http://cran.r-project.org/doc/manuals/R-intro.html#Array-indexing

我怀疑你可以使用for循环来解决你的问题:
http://cran.r-project.org/doc/manuals/R-intro.html#Repetitive-execution

答案 2 :(得分:0)

由于矩阵以数字模式,整数/双精度类型和存储模式整数/双精度存储(假设矩阵包含数值),您可以使用简单的方括号索引来解决其中的特定值,例如

# create dummy data
> m <- matrix(rnorm(25), 5)
> mode(m)    # check mode
[1] "numeric"
> typeof(m)  # check type
[1] "double"
> storage.mode(m)
[1] "double"

现在,为了创建对角矩阵,您可以使用lower.triupper.tri函数,它们分别为主对角线下方和上方的矩阵元素返回逻辑值。

您可以使用lower.triupper.tri函数将非对角线元素设置为0。

> m[lower.tri(m)] <- 0
> m[upper.tri(m)] <- 0
> m
          [,1]       [,2]       [,3]      [,4]      [,5]
[1,] 0.3356640  0.0000000  0.0000000  0.000000 0.0000000
[2,] 0.0000000 -0.2940369  0.0000000  0.000000 0.0000000
[3,] 0.0000000  0.0000000 -0.4490546  0.000000 0.0000000
[4,] 0.0000000  0.0000000  0.0000000 -1.093924 0.0000000
[5,] 0.0000000  0.0000000  0.0000000  0.000000 0.3199157

当然,您可以将任何常量设置为低/高对角线元素,无论是数字,字符,逻辑,NA等......

将零设置为非对角线元素后,您只需使用方括号索引即可。一点点转移:在数学上记住,向量是矩阵的特殊情况(而反之亦然),但同样不代表 R

> is.vector(m)
[1] FALSE
> is.matrix(1:10)
[1] FALSE

但是,最后,你可以做:

> m[m == 0] <- 1

这将在矩阵中的任何位置插入1。您可以使用diag函数来访问/更改对角元素,例如:

> m[m == 1] <- 0
> diag(m) <- rep(pi, 5)

会将对角矩阵更改为标量矩阵。

在我这个无聊的帖子之后,让我们所有人都希望它能以某种方式帮助某人......

干杯!