R:矩阵的索引

R:矩阵的索引,r,bioinformatics,biometrics,bioconductor,R,Bioinformatics,Biometrics,Bioconductor,我最初有一个矩阵调用,如下所示: [,1] [,2] [1,] 0 0 [2,] 0 0 [3,] 0 0 [4,] 0 0 [5,] 0 0 [6,] 0 0 [7,] 0 0 [8,] 0 0 [9,] 0 0 [10,] 0 0 [,1] [,2] [1,] 2 3 [2,] 7 9 [,1

我最初有一个矩阵调用,如下所示:

      [,1] [,2]
[1,]     0    0
[2,]     0    0
[3,]     0    0
[4,]     0    0
[5,]     0    0
[6,]     0    0
[7,]     0    0
[8,]     0    0
[9,]     0    0
[10,]    0    0 
     [,1] [,2]
 [1,]   2    3
 [2,]   7    9
      [,1] [,2]
[1,]     0    0
[2,]     1    1
[3,]     1    1
[4,]     0    0
[5,]     0    0
[6,]     0    0
[7,]     1    1
[8,]     1    1
[9,]     1    1
[10,]    0    0 
我有一个索引矩阵(索引),如下所示:

      [,1] [,2]
[1,]     0    0
[2,]     0    0
[3,]     0    0
[4,]     0    0
[5,]     0    0
[6,]     0    0
[7,]     0    0
[8,]     0    0
[9,]     0    0
[10,]    0    0 
     [,1] [,2]
 [1,]   2    3
 [2,]   7    9
      [,1] [,2]
[1,]     0    0
[2,]     1    1
[3,]     1    1
[4,]     0    0
[5,]     0    0
[6,]     0    0
[7,]     1    1
[8,]     1    1
[9,]     1    1
[10,]    0    0 
我希望得到的res矩阵如下所示:

      [,1] [,2]
[1,]     0    0
[2,]     0    0
[3,]     0    0
[4,]     0    0
[5,]     0    0
[6,]     0    0
[7,]     0    0
[8,]     0    0
[9,]     0    0
[10,]    0    0 
     [,1] [,2]
 [1,]   2    3
 [2,]   7    9
      [,1] [,2]
[1,]     0    0
[2,]     1    1
[3,]     1    1
[4,]     0    0
[5,]     0    0
[6,]     0    0
[7,]     1    1
[8,]     1    1
[9,]     1    1
[10,]    0    0 

我有一个很大的矩阵,循环遍历索引矩阵需要很长时间。请让我知道是否有更好的方法来做到这一点。我希望做一些类似mat[index,]If
res
的事情,如果你的主矩阵和
索引是索引矩阵:

这将有助于:

idx  <- do.call("c",apply(indexes,1,function(x){seq(x[1],x[2])}))

res[idx,] <- 1
test <- matrix(rep(0,1E7), ncol=2)
Index <- matrix(sort(sample(1:(1E7*0.5), size=10000)), ncol=2, byrow=TRUE)
test[unlist(apply(Index, 1, function(x){x[1]:x[2]})),] <- 1
idx索引头(索引)
[,1] [,2]
[1,]    3    4
[2,]   14   16
[3,]   23   33
[4,]   40   63
[5,]   67   74
[6,]   79   83
给他们计时:

> system.time(idx  <- do.call("c",apply(indexes,1,function(x){seq(x[1],x[2])})))   user  system elapsed 
  0.008   0.000   0.007 

> system.time( idx2 <- unlist( apply( indexes , 1 , FUN = function(x){ seq.int(x[1],x[2])}) ))
   user  system elapsed 
  0.004   0.000   0.002

>system.time(idx system.time)(idx2编辑:我确实误解了,这应该有助于:

idx  <- do.call("c",apply(indexes,1,function(x){seq(x[1],x[2])}))

res[idx,] <- 1
test <- matrix(rep(0,1E7), ncol=2)
Index <- matrix(sort(sample(1:(1E7*0.5), size=10000)), ncol=2, byrow=TRUE)
test[unlist(apply(Index, 1, function(x){x[1]:x[2]})),] <- 1
test使用您的答案创建行索引向量
ridx
,然后

res[as.logical(ridx),] = 1L

在本例中,第8行不包含数字。看起来是mat[array(index),],但您的示例索引矩阵中没有数字8(只有2,3,7,9),据我所知。这就是问题的症结所在。如果你看得到的矩阵,它就清楚了。谢谢。使用
head
dput
发布部分实际
res
索引
矩阵来澄清你的问题。请看:你能提供一个例子吗?谢谢。@user1938809试图重新解释您的问题,并对我的答案进行了适当的编辑。如果这不对,也许您可以澄清您的问题。首先,它给出了错误。其次,我想将第2:3行和第7:9行设置为1。通过一次调用,将第2、3、7、9行设置为1很容易。棘手的部分是索引矩阵给出了res的起始索引和结束索引matrix.谢谢。@user1938809为错误感到抱歉,有一个输入错误。我已经更新了可能的解决方案。谢谢。有没有办法避免同样的应用?是的,这是可行的,但有时R会耗尽内存。我希望有更直接的方法。@user1938809更具体一点——在创建ridx时?进行子集替换?多少您有多少内存?您的对象有多大(object.size())?与其他解决方案相比,上面的操作不应该特别占用内存。