【问题标题】:Manipulating values in a matrix处理矩阵中的值
【发布时间】:2016-06-10 19:40:30
【问题描述】:

我写了以下代码:

randomdiv <- function(nchrom, ndivs, size) {
sz <- matrix(nrow = nchrom, ncol = ndivs)          
for (j in 1:nchrom) {
  n <- size
  for (i in 1:ndivs)
  {
    old_subs <- rbinom (1, n, 0.5)          
    num_chrom <- rep(1 / nchrom, nchrom)     
    new_subs <- rmultinom(1, size * nchrom / 2, prob = c(num_chrom))     

    total_subs <- cbind(old_subs, new_subs)    
    m <- as.matrix(ifelse(total_subs[,1]>0, total_subs[,1] + total_subs[,2], 0))  

      sz[j,i] <- m[1,1]      
    n <- m
  }
}  
return (sz) 
}

返回以下矩阵:

> randomdiv(10, 10, 3)
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    2    2    5    4    2    3    3    3    0     0
 [2,]    3    3    3    2    0    0    0    0    0     0
 [3,]    2    5    3    1    2    2    0    0    0     0
 [4,]    4    3    4    3    4    5    3    0    0     0
 [5,]    2    3    6    4    3    3    5    4    5     2
 [6,]    2    0    0    0    0    0    0    0    0     0
 [7,]    0    0    0    0    0    0    0    0    0     0
 [8,]    2    0    0    0    0    0    0    0    0     0
 [9,]    2    0    0    0    0    0    0    0    0     0
[10,]    3    6    7    4    4    2    1    0    0     0

我最初确实希望将任何出现的 0 沿该特定行传播到其余列。我现在想要做的是找到 0 出现的位置,并且整个矩阵只返回该点之后的 0。一旦出现 0,我可以停止矩阵,但我想为复制的矩阵保留相同数量的列,所以如果我可以从第一个出现的点开始用 0 填充矩阵会更容易。例如,在此处显示的输出中,矩阵将只显示从第 2 列开始的所有行的 0,因为第一个 0 出现在 [7,1]

如果有人有任何想法,将不胜感激。

【问题讨论】:

    标签: r matrix data-manipulation


    【解决方案1】:
    set.seed(123)
    (M <- randomdiv(10, 10, 3))
    #       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    #  [1,]    3    4    5    7    3    0    0    0    0     0
    #  [2,]    2    4    6    2    4    1    2    2    2     3
    #  [3,]    2    3    3    2    1    2    2    2    5     2
    #  [4,]    6    3    5    7    5    6    8    5    6     5
    #  [5,]    2    3    5    4    3    4    4    3    3     3
    #  [6,]    0    0    0    0    0    0    0    0    0     0
    #  [7,]    2    3    2    5    3    5    5    7    5     5
    #  [8,]    3    2    2    1    4    4    4    3    1     0
    #  [9,]    1    0    0    0    0    0    0    0    0     0
    # [10,]    5    3    1    4    3    2    5    3    0     0
    M[cumsum(c(M) == 0) > 0] <- 0
    M
    #       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    #  [1,]    3    0    0    0    0    0    0    0    0     0
    #  [2,]    2    0    0    0    0    0    0    0    0     0
    #  [3,]    2    0    0    0    0    0    0    0    0     0
    #  [4,]    6    0    0    0    0    0    0    0    0     0
    #  [5,]    2    0    0    0    0    0    0    0    0     0
    #  [6,]    0    0    0    0    0    0    0    0    0     0
    #  [7,]    0    0    0    0    0    0    0    0    0     0
    #  [8,]    0    0    0    0    0    0    0    0    0     0
    #  [9,]    0    0    0    0    0    0    0    0    0     0
    # [10,]    0    0    0    0    0    0    0    0    0     0
    

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 2016-04-23
      • 2017-09-19
      • 2013-10-22
      • 1970-01-01
      • 2014-04-03
      相关资源
      最近更新 更多