我想用我在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
答案 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