【问题标题】:Take value from list and use it as index从列表中获取值并将其用作索引
【发布时间】:2017-07-19 15:21:30
【问题描述】:

我有一个这样的矩阵(A)(行和列的名称是识别码(ID):

     1   3  10  38  46
 1   0 0.4   0   0   0
 3   0   0   0   0   0
10   0   0 0.9 0.8   0
38   0   0   0   0   0
46   0 0.1   0   0   0

还有一个像这样的矩阵(B):

               a            b            c
1   2.676651e-04 4.404911e-06 9.604227e-06
3   6.073389e-10 3.273222e-05 3.360321e-04
10  4.156392e-08 1.269607e-06 7.509217e-06
38  4.200699e-08 3.227431e-02 8.286920e-11
46  9.352353e-05 3.318948e-20 8.694981e-06

我想取A矩阵元素的索引>0,所以我用了这个命令:

temp <- apply(A,1, FUN=function(x) which(x>0))

它返回了一个列表,其中元素的正确索引>0。

之后,我想使用索引乘以矩阵 B 的元素。特别是,我想为每一行做这样的事情:

1: 6.073389e-10*3.273222e-05*3.360321e-04 

我已使用矩阵 A 的信息(在第一行的第二列中我的值 >0)作为索引,将矩阵 B 中的元素作为第一行。

对于第二行,我得到 0 因为 A[2,]>0 中没有元素

对于第三行,我想获得类似于第一行的东西,但我应该将两个产品相加

10: 4.156392e-08*1.269607e-06*7.509217e-06  +4.200699e-08*3.227431e-02*8.286920e-11

我试图取消列出该列表,但通过这种方式我获得了一个向量丢失了 ID 之间的对应关系

【问题讨论】:

  • 也许你想要which(A&gt;0, arr.ind=TRUE)

标签: r list indexing


【解决方案1】:
A <-
  matrix(
    c(0, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.9, 0.8, 0, 0, 0, 0, 0,  0, 0, 0.1, 0, 0, 0),
    nrow = 5,
    ncol = 5,
    byrow = T
  )
B <-
  matrix(
    c(
      2.676651e-04, 4.404911e-06, 9.604227e-06,
      6.073389e-10, 3.273222e-05, 3.360321e-04,
      4.156392e-08, 1.269607e-06, 7.509217e-06,
      4.200699e-08, 3.227431e-02, 8.286920e-11,
      9.352353e-05, 3.318948e-20, 8.694981e-06
    ),
    nrow = 5,
    ncol = 3,
    byrow = T
  )

idx<-which(A>0, arr.ind = T)

result <- 0;
for (i in 1:nrow(idx)) {
  cat(A[idx[i,1],idx[i,2]], sep="\n")
  cat(B[idx[i,2], ], sep="\n")
  result = result + sum(A[idx[i,1],idx[i,2]] * B[idx[i,2],])
}
cat("result=")
cat(result)

【讨论】:

    猜你喜欢
    • 2022-10-12
    • 2021-10-06
    • 1970-01-01
    • 2019-01-29
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多