微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R中的矩阵Ifelse

如何解决R中的矩阵Ifelse

我有以下代码

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。