2016-02-27 2 views
1

я написал следующий код:Манипулирование значения в матрице

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, и чтобы вся матрица возвращала только 0s за эту точку. Я мог бы остановить матрицу, когда произойдет 0, но я хочу сохранить одинаковое количество столбцов для реплицированных матриц, поэтому будет легче, если я могу просто заполнить матрицу 0 с точки, в которой происходит первая. Например, в представленном здесь примере матрица будет отображать только 0 из второго столбца для всех строк, потому что первое 0 произошло в [7,1]

Если у кого-то есть какие-либо идеи, это было бы очень оценили.

ответ

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 
Смежные вопросы