【发布时间】:2023-03-13 20:19:02
【问题描述】:
下面的函数是一个使用分布然后用值填充矩阵的函数。
library(tidyverse)
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){
if (number_of_events == 1){
beta_sim = rbeta(1, alpha, beta)
data_matrix[yr, 2] <- beta_sim
} else if (number_of_events == 2){
for (i in 2:3){
beta_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- beta_sim
}
} else if (number_of_events == 3){
for (i in 2:4){
beta_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- beta_sim
}
} else if (number_of_events == 4){
for (i in 2:5){
beta_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- beta_sim
}
} else{
for (i in 2:6){
beta_sim = rbeta(1, alpha, beta)
data_matrix[yr, i] <- beta_sim
}
}
}
}
sorted_matrix <- cbind(data_matrix[,1],t(apply(data_matrix[,2:6],1,function(x) sort(x))))
print(sorted_matrix)
}
manual = occ_simulation(10, 10, 2, 20)
比如这个函数的输出矩阵是:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0.083134569 0.08617405 0.09887510 0.11772536 0.22531132
[2,] 2 0.031942297 0.05572298 0.13227172 0.13373033 0.18225673
[3,] 3 0.034385791 0.05340521 0.06165728 0.08298166 0.09168579
[4,] 4 0.051670957 0.08783456 0.10290313 0.11267966 0.14254834
[5,] 5 0.005269822 0.01229135 0.03251302 0.03560609 0.12144208
[6,] 6 0.059678131 0.06291472 0.07521237 0.08371512 0.17253282
[7,] 7 0.020974306 0.03211666 0.03951780 0.12363214 0.12707027
[8,] 8 0.066050034 0.09113262 0.11433074 0.11642412 0.19931177
[9,] 9 0.042327058 0.08072802 0.15232605 0.17718338 0.19237172
[10,] 10 0.034537165 0.07571227 0.09081958 0.11202394 0.11799924
我想知道的是,我如何能够在我的函数中实现绘图,以便我将矩阵的第一列作为 x 轴的值,然后根据它们的 x 值绘制点的行绘制在 y 轴上。
例如,对于 x 值为 1,我将在其正上方绘制 5 个点,这 5 个点是第一行中的点:0.083134569, 0.08617405, 0.09887510, 0.11772536, 0.22531132。谢谢!
【问题讨论】: