【发布时间】: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