作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要遍历对角线 + 1(即对角线右侧的值 1 列)并将值写入数据框中的列:
write.csv(data.frame(matrix[1,2], matrix[2,3], matrix[3,4])
最佳答案
这样做的一个快速方法是使用经常被忽视的 row()
和 col()
职能。这些为矩阵的每个元素分别返回该元素所属的行或列。
对角线是元素的行索引等于列索引的位置。第一个子对角线是行索引等于列索引加 1,而第一个超对角线是行索引等于列索引减 1。
这里有些例子:
m <- matrix(1:25, ncol = 5)
m
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 6 11 16 21
[2,] 2 7 12 17 22
[3,] 3 8 13 18 23
[4,] 4 9 14 19 24
[5,] 5 10 15 20 25
m[row(m) == col(m)]
diag(m)
> m[row(m) == col(m)]
[1] 1 7 13 19 25
> diag(m) ## just to show this is correct
[1] 1 7 13 19 25
m[row(m) == col(m) + 1
> m[row(m) == col(m) + 1]
[1] 2 8 14 20
m[row(m) == col(m) -1]
> m[row(m) == col(m) -1]
[1] 6 12 18 24
write.csv(data.frame(m[row(m) == col(m) + 1), file = "subdiag.csv")
diags <- function(m, type = c("sub", "super"), offset = 1) {
type <- match.arg(type)
FUN <-
if(isTRUE(all.equal(type, "sub")))
`+`
else
`-`
m[row(m) == FUN(col(m), offset)]
}
> diags(m)
[1] 2 8 14 20
> diags(m, type = "super")
[1] 6 12 18 24
> diags(m, offset = 2)
[1] 3 9 15
关于r - 循环遍历矩阵的对角线+1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672585/
我是一名优秀的程序员,十分优秀!