为什么我会收到此 'number of items to replace is not a multiple of replacement length' 错误?
Why am I getting this 'number of items to replace is not a multiple of replacement length' error?
我一直在尝试调试这段代码,但我看不出错误是从哪里来的。我正在尝试将 beta 分布的值替换为矩阵。我想要的格式是第一列中有模拟编号,然后是后续列中模拟的不同数据点。
我已经检查过,有人提到我可能会返回一个向量而不是一个数字,但我很确定 rbeta 的输出只是一个值,所以为什么它不让我将此值放入矩阵中?
非常感谢。
occ_simulation <- function(nyears, lambda, alpha, beta){
data_matrix <- matrix(, nrow = nyears, ncol = 6)
for (z in 1:nyears){
data_matrix[z][1] <- z
}
for (yr in 1:nyears){
poisson_sim = rpois(1, lambda)
for (number_of_events in poisson_sim){
print(number_of_events)
if (number_of_events == 1){
occ_sim = rbeta(1, alpha, beta)
# data_matrix[yr][2] <- occ_sim
} else if (number_of_events == 2){
for (i in 2:3){
occ_sim = rbeta(1, alpha, beta)
# data_matrix[yr][i] <- occ_sim
}
} else if (number_of_events == 3){
for (i in 2:4){
occ_sim = rbeta(1, alpha, beta)
# data_matrix[yr][i] <- occ_sim
}
} else if (number_of_events == 4){
for (i in 2:5){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr][i] <- occ_sim
}
} else{
for (i in 2:6){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr][i] <- occ_sim
}
}
}
}
print(data_matrix)
}
manual = occ_simulation(2, 10, 2, 20)
问题出在这些行中:
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr][i] <- occ_sim
yr
变量在 1:nyears
上循环,在该循环中,i
有一个从 2
到 6
的循环。所以,假设在第一年,你有 data_matrix[yr]
是一个长度为 1 的向量,并且在 i=2
代码 data_matrix[yr][i]
试图获取向量的第二个元素时经历循环长度为 1,这会产生错误。
编辑 回复评论
如果我理解您要执行的操作,您可以使用 data_matrix[yr, i]
而不是 data_matrix[yr][i]
来修复函数。你也可以做 data_matrix[yr,][i]
,虽然这不太清楚。这是代码和结果:
occ_simulation <- function(nyears, lambda, alpha, beta){
data_matrix <- matrix(, nrow = nyears, ncol = 6)
for (z in 1:nyears){
data_matrix[z, 1] <- z
}
for (yr in 1:nyears){
poisson_sim = rpois(1, lambda)
for (number_of_events in poisson_sim){
print(number_of_events)
if (number_of_events == 1){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, 2] <- occ_sim
} else if (number_of_events == 2){
for (i in 2:3){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- occ_sim
}
} else if (number_of_events == 3){
for (i in 2:4){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- occ_sim
}
} else if (number_of_events == 4){
for (i in 2:5){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- occ_sim
}
} else{
for (i in 2:6){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- occ_sim
}
}
}
}
data_matrix
}
manual = occ_simulation(2, 10, 2, 20)
manual
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 1 0.05848754 0.04926032 0.03998070 0.1067415 0.006234281
# [2,] 2 0.09572200 0.02727308 0.01144517 0.0799155 0.066248752
我一直在尝试调试这段代码,但我看不出错误是从哪里来的。我正在尝试将 beta 分布的值替换为矩阵。我想要的格式是第一列中有模拟编号,然后是后续列中模拟的不同数据点。
我已经检查过,有人提到我可能会返回一个向量而不是一个数字,但我很确定 rbeta 的输出只是一个值,所以为什么它不让我将此值放入矩阵中?
非常感谢。
occ_simulation <- function(nyears, lambda, alpha, beta){
data_matrix <- matrix(, nrow = nyears, ncol = 6)
for (z in 1:nyears){
data_matrix[z][1] <- z
}
for (yr in 1:nyears){
poisson_sim = rpois(1, lambda)
for (number_of_events in poisson_sim){
print(number_of_events)
if (number_of_events == 1){
occ_sim = rbeta(1, alpha, beta)
# data_matrix[yr][2] <- occ_sim
} else if (number_of_events == 2){
for (i in 2:3){
occ_sim = rbeta(1, alpha, beta)
# data_matrix[yr][i] <- occ_sim
}
} else if (number_of_events == 3){
for (i in 2:4){
occ_sim = rbeta(1, alpha, beta)
# data_matrix[yr][i] <- occ_sim
}
} else if (number_of_events == 4){
for (i in 2:5){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr][i] <- occ_sim
}
} else{
for (i in 2:6){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr][i] <- occ_sim
}
}
}
}
print(data_matrix)
}
manual = occ_simulation(2, 10, 2, 20)
问题出在这些行中:
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr][i] <- occ_sim
yr
变量在 1:nyears
上循环,在该循环中,i
有一个从 2
到 6
的循环。所以,假设在第一年,你有 data_matrix[yr]
是一个长度为 1 的向量,并且在 i=2
代码 data_matrix[yr][i]
试图获取向量的第二个元素时经历循环长度为 1,这会产生错误。
编辑 回复评论
如果我理解您要执行的操作,您可以使用 data_matrix[yr, i]
而不是 data_matrix[yr][i]
来修复函数。你也可以做 data_matrix[yr,][i]
,虽然这不太清楚。这是代码和结果:
occ_simulation <- function(nyears, lambda, alpha, beta){
data_matrix <- matrix(, nrow = nyears, ncol = 6)
for (z in 1:nyears){
data_matrix[z, 1] <- z
}
for (yr in 1:nyears){
poisson_sim = rpois(1, lambda)
for (number_of_events in poisson_sim){
print(number_of_events)
if (number_of_events == 1){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, 2] <- occ_sim
} else if (number_of_events == 2){
for (i in 2:3){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- occ_sim
}
} else if (number_of_events == 3){
for (i in 2:4){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- occ_sim
}
} else if (number_of_events == 4){
for (i in 2:5){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- occ_sim
}
} else{
for (i in 2:6){
occ_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- occ_sim
}
}
}
}
data_matrix
}
manual = occ_simulation(2, 10, 2, 20)
manual
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 1 0.05848754 0.04926032 0.03998070 0.1067415 0.006234281
# [2,] 2 0.09572200 0.02727308 0.01144517 0.0799155 0.066248752