使用来自'的向量填充矩阵。循环 - 产生NA

时间:2014-12-03 00:03:42

标签: r matrix vector

我想用我在for循环中生成的向量填充矩阵的行。但是,在我运行代码之后,矩阵仍然充满了NA。

我能够制作载体" l"很好 - 这是一个长度为n(6)的向量,但我似乎无法填写" h"随着l的迭代。

非常感谢任何帮助。

p_def = 0.50 
n = 6 
N = 10 
breaks = vector(length = n-1)

for (k in 1:N){
  h <- matrix(nrow=N,ncol=n)
for (i in 1:(n-1)){
  p = runif(1, 0, 1)
  if (p <= p_def){
      breaks[i] = 1
      }
  else {
      breaks[i]=0
      }
  }
temp = 1
j =1 
l = vector(length=n)
for (i in 1:n){
  if (breaks[i] == 1){
    l[j] = temp
    temp = 1
    j = 1 + j
    if (i ==n-1) {
      l[j]=temp}
  }
  if (breaks[i] == 0){
    temp = temp + 1
    if (i==n-1){
      l[j] = temp
      }
    }
}
h[k,] <- l
}
h

借助罗德里戈的帮助,我将剧本编辑为:

p_def = 0.50 # probability of defective
n = 6 # length of spore chains
N = 10 # number of spore chains
breaks = vector(length = n-1)
h <- matrix(nrow=N,ncol=n) 

for (k in 1:N){ 
  for (i in 1:(n-1)){
    p = runif(1, 0, 1)
    if (p <= p_def){
    breaks[i] = 1
  } else {
  breaks[i]=0
  }
}
temp = 1
j =1 
l = vector(length=n)
for (i in breaks){
  if (i == 1){
    l[j] = temp
    temp = 1
    j = 1 + j
    if (i ==n-1) {
      l[j]=temp}
  }
  if ([i == 0){
  temp = temp + 1
  if (i==n-1){
    l[j] = temp
  }
  }
}

h[k,] <- l
}
h
      [,1] [,2] [,3] [,4] [,5] [,6]
 [1,]    2    2    2    0    0    0
 [2,]   NA   NA   NA   NA   NA   NA
 [3,]   NA   NA   NA   NA   NA   NA
 [4,]   NA   NA   NA   NA   NA   NA
 [5,]   NA   NA   NA   NA   NA   NA
 [6,]   NA   NA   NA   NA   NA   NA
 [7,]   NA   NA   NA   NA   NA   NA
 [8,]   NA   NA   NA   NA   NA   NA
 [9,]   NA   NA   NA   NA   NA   NA
[10,]   NA   NA   NA   NA   NA   NA

1 个答案:

答案 0 :(得分:1)

我没有足够的声誉评论你的帖子。可以显示输出应该是什么样的吗?

我的代码中发现了一些错误。

for (k in 1:N){
     h <- matrix(nrow=N,ncol=n)

每次此循环开始时,它会重置h矩阵 将h <- matrix(nrow=N,ncol=n)移到循环外部 这可能就是为什么你在每一行都有NA。

此外:

for (i in 1:n){
    if (breaks[i] == 1){
    ...
    }
    if (breaks[i] == 0){
    ...
    }

应更改为:

for(i in breaks){
   if(i == 1){
   ...
   }
   if(i == 0){
   ...

n = 6期间,您无法运行间隔breaks length = 5的循环 你正在运行一个比矢量本身更大的循环...... 这也将生成NA,因为它不会循环,因为大小不同

当我修正这些点时,

我的h矩阵输出看起来像这样:

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

这就是我所做的:

p_def = 0.50 
n = 6 
N = 10 
breaks = vector(length = n-1)

h <- matrix(nrow=N,ncol=n)

for (k in 1:N){

    for (i in 1:(n-1)){
        p = runif(1, 0, 1)
        if (p <= p_def){
            breaks[i] = 1
        }
        else {
            breaks[i]=0
        }
    }
    temp = 1
    j =1 
    l = vector(length=n)
    for(i in breaks){
        if(i == 1){
            l[j] = temp
            temp = 1
            j = 1 + j
            if (i == n-1) {
                l[j]=temp}
        }
        if(i == 0){
            temp = temp + 1
            if (i==n-1){
                l[j] = temp
            }
        }
    }
    h[k,] <- l
}
h