任何人都可以告诉我如何用1代替0和反之亦然代替R中的对角矩阵。
答案 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.tri
和upper.tri
函数,它们分别为主对角线下方和上方的矩阵元素返回逻辑值。
您可以使用lower.tri
和upper.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)
会将对角矩阵更改为标量矩阵。
在我这个无聊的帖子之后,让我们所有人都希望它能以某种方式帮助某人......
干杯!