【发布时间】:2018-09-07 23:44:43
【问题描述】:
我有一个矩阵a,看起来像这样:
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 3 0 6
[3,] 0 5 0 0 0
[4,] 6 0 0 0 0
[5,] 0 0 0 0 0
我有这段代码,如果矩阵条目不为零,则该代码用于执行操作。
for(i in 1:5){
for(j in 1:5){
if(sum(a[i,]) == 0 && i <= 5) {
i+1
} else {
if(a[i,j] == 0 && j <= 5){
j+1
} else {
justi = i+i
bothij = i+j
print(justi)
print(bothij)
}
}
}
}
在这种情况下,操作将仅适用于以下条目:
[1] "2,3"
[1] "2,5"
[1] "3,2"
[1] "4,1"
以上代码的结果是:
[1] 4
[1] 5
[1] 4
[1] 7
[1] 6
[1] 5
[1] 8
[1] 5
我怎样才能只为每个i 执行一次i+i?
【问题讨论】:
-
那你为什么不使用转置函数呢?
t() -
i+1和j+1应该做什么? -
i+1和j+1在这里什么都不做。一方面,没有任务。另一方面,如果您更改 R 中 for 循环的索引,它不会影响下一次迭代。见?"for" -
你能用文字解释你想做什么吗?您可以通过引用
a[a!=0]对每个非零条目执行单个操作,但看起来您想要添加索引而不是值或其他内容。我可能会想出一条线来做你正在做的事情,但如果这不是你真正在做的事情,那将是一种浪费。顺便说一句,在您的 for 循环中,分别使用next或break进行下一次迭代或退出内部循环。 -
同意我们需要明确正在尝试的内容。使用失败的代码来呈现问题描述是进一步失败的秘诀,或者充其量是混乱。我想知道答案是否是查看
next命令,但这纯粹是猜测。