问题描述
cenarios = 100 #
tamanho = 10000
prob_sin = 0.02
sev_med = 10000
replicacoes_ind = matrix(NA,tamanho,cenarios)
replicacoes_sev = matrix(NA,cenarios)
SAg = array(NA,cenarios)
quant_sin = array(NA,cenarios)
u = matrix(data=runif(tamanho*cenarios,1),nrow=tamanho,ncol=cenarios)
ifelse(u <= prob_sin,{replicacoes_ind = 1; replicacoes_sev = rexp(1,rate = 1/sev_med)},{replicacoes_ind = 0; replicacoes_sev = 0})
但是在我的最后一行(ifelse
)中,我打算做的是:如果矩阵u
的每个元素都比prob_sin
replicacoes_ind矩阵的各个元素遵循随机数。否则,在各个元素中为0。但是,它会为矩阵分配1或0并将其转换为数字。
如何为所涉及的矩阵的每个元素设置条件?
解决方法
使用更小的示例集(以及可重复性的种子)尝试一下:
cenarios = 5
tamanho = 6
sev_med = 6
replicacoes_ind = matrix(NA,tamanho,cenarios)
replicacoes_sev = matrix(NA,cenarios)
SAg = array(NA,cenarios)
quant_sin = array(NA,cenarios)
set.seed(42)
u = matrix(data=runif(tamanho*cenarios,1),nrow=tamanho,ncol=cenarios)
u
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0.9148060 0.7365883 0.9346722 0.4749971 0.08243756
# [2,] 0.9370754 0.1346666 0.2554288 0.5603327 0.51421178
# [3,] 0.2861395 0.6569923 0.4622928 0.9040314 0.39020347
# [4,] 0.8304476 0.7050648 0.9400145 0.1387102 0.90573813
# [5,] 0.6417455 0.4577418 0.9782264 0.9888917 0.44696963
# [6,] 0.5190959 0.7191123 0.1174874 0.9466682 0.83600426
对于笑容,我将限制设置为0.15,以便我们可以替换一些值:
prob_sin <- 0.15
ind <- (u <= prob_sin)
ind
# [,1] [,2] [,3] [,4] [,] FALSE FALSE FALSE FALSE TRUE
# [2,] FALSE TRUE FALSE FALSE FALSE
# [3,] FALSE FALSE FALSE FALSE FALSE
# [4,] FALSE FALSE FALSE TRUE FALSE
# [5,] FALSE FALSE FALSE FALSE FALSE
# [6,] FALSE FALSE TRUE FALSE FALSE
从这里,我们可以一步生成0和1:
replicacoes_ind <- +ind
replicacoes_ind
# [,1] [,2] [,3] [,4] [,] 0 0 0 0 1
# [2,] 0 1 0 0 0
# [3,] 0 0 0 0 0
# [4,] 0 0 0 1 0
# [5,] 0 0 0 0 0
# [6,] 0 0 1 0 0
第二个矩阵大致相同:
replicacoes_sev[ind] <- rexp(sum(ind),rate = 1/sev_med)
replicacoes_sev
# [,1] [,2] [,4] [,] NA NA NA NA 41.07943
# [2,] NA 25.00878 NA NA NA
# [3,] NA NA NA NA NA
# [4,] NA NA NA 0.1728925 NA
# [5,] NA NA NA NA NA
# [6,] NA NA 7.170642 NA NA
replicacoes_sev[!ind] <- 0
replicacoes_sev
# [,] 0 0.00000 0.000000 0.0000000 41.07943
# [2,] 0 25.00878 0.000000 0.0000000 0.00000
# [3,] 0 0.00000 0.000000 0.0000000 0.00000
# [4,] 0 0.00000 0.000000 0.1728925 0.00000
# [5,] 0 0.00000 0.000000 0.0000000 0.00000
# [6,] 0 0.00000 7.170642 0.0000000 0.00000