【问题标题】:Get matrix row indices for non zero sumrows and column indices for each of those rows [closed]获取每个行的非零和行的矩阵行索引和列索引[关闭]
【发布时间】: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+1j+1 应该做什么?
  • i+1j+1 在这里什么都不做。一方面,没有任务。另一方面,如果您更改 R 中 for 循环的索引,它不会影响下一次迭代。见?"for"
  • 你能用文字解释你想做什么吗?您可以通过引用 a[a!=0] 对每个非零条目执行单个操作,但看起来您想要添加索引而不是值或其他内容。我可能会想出一条线来做你正在做的事情,但如果这不是你真正在做的事情,那将是一种浪费。顺便说一句,在您的 for 循环中,分别使用 nextbreak 进行下一次迭代或退出内部循环。
  • 同意我们需要明确正在尝试的内容。使用失败的代码来呈现问题描述是进一步失败的秘诀,或者充其量是混乱。我想知道答案是否是查看next 命令,但这纯粹是猜测。

标签: r loops for-loop matrix


【解决方案1】:

我已经实现了我想做的事情:

for(i in 1:5){
    if(sum(a[i,]) != 0) {
        justi= i+i 
        print(justi)
        for(j in 1:5){
            if(a[i,j] != 0){
                bothij = i+j
                print(bothij)
            }
        }
    }
}

这样我得到:

[1] 4
[1] 5
[1] 7
[1] 6
[1] 5
[1] 8
[1] 5

i+i 每行一次。

如果有人有更快的答案,我愿意接受建议。

【讨论】:

    【解决方案2】:

    你试过了吗?

    a_vector &lt;- a[a &gt; 0]

    然后使用a_vector 为每个index 做一些stuff

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      相关资源
      最近更新 更多