我正在尝试创建一个程序,该程序将我创建的矩阵的对角线求和。我使用了下面的代码,但我不明白我所做的代码有什么问题。
a <- c(1, 2, 3)
b <- c(3, 5, 6)
x <- matrix(a, b, nrow=3, ncol=3)
x
for (i in 1:nrow(x)) {
for (j in 1:ncol(x)) {
if (i=j) {
diags[i, j] <- sum(x[i, j])
}
}
}
这已经是很棒的代码了!然而,正如在评论中提到的,当你想对一个向量求和的时候,你是在尝试对一个标量求和。你需要将x[i, j]
的结果加到一个起始值上,这个值当然是零。因此,首先创建值为0的diags
,并在每次循环迭代时将结果添加到CC_3中。
注意:用于比较,我们使用`==`
,用于函数调用=
中的赋值,以及用于脚本`<-`
中的赋值。最好使用seq
函数,如seq_len(nrow(x))
而不是1:nrow(x)
;乍一看,结果是一样的,但有一些优点,例如,如果sum
0为零。
diags <- 0
for (i in seq_len(nrow(x))) {
for (j in seq_len(ncol(x))) {
if (i == j) {
diags <- diags + x[i, j]
}
}
}
diags
# [1] 9
检查diag
功能
sum(diag(x))
# [1] 9
数据:
我用了一个稍微不同的矩阵,它不是那么对称,有更多可区分的值。
x <- matrix(1:9 , nrow=4, ncol=3)