я написал следующий код:Манипулирование значения в матрице
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]
Если у кого-то есть какие-либо идеи, это было бы очень оценили.