【发布时间】:2012-05-20 23:35:19
【问题描述】:
这已经让我发疯了,现在我完全绝望了:(
这是矩阵draw(不要关注NA,稍后我需要那些列):
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 NA NA NA
[2,] 2 20 NA NA NA
[3,] 2 30 NA NA NA
[4,] 2 40 NA NA NA
[5,] 1 50 NA NA NA
[6,] 2 70 NA NA NA
[7,] 2 80 NA NA NA
[8,] 2 90 NA NA NA
[9,] 1 100 NA NA NA
[10,] 2 120 NA NA NA
[11,] 2 130 NA NA NA
[12,] 2 140 NA NA NA
所以,根据第 1 列,我需要根据正态分布在第 3 列中写入数字。但在 6% 的情况下,它必须为 0。
这就是我想的处理方式(现在只有draw[i,1]==2时):
for (i in 1:nrow(draw))
{
p <- runif(1, min=0, max=1)
if (draw[i,2]==2 && p>0.06)
{
draw[i,3] <- rnorm(1, mean=17, sd=7.5)} else {draw[i,3]<-0}
if (draw[i,1]==1) {draw[i,3] <- rnorm(1, mean=11, sd=3)}
if (draw[i,1]==3) {draw[i,3] <- rnorm(1, mean=17, sd=15)}
if (draw[i,3]<1 && draw[i,3]!=0) {draw[i,3] <- 1} else {draw[i,3] <- ceiling(draw[i,3])
}
}
问题来了: 1. 我注意到 p(我猜它必须是随机数)总是相同的 2.所有draw[i,3]其中draw[1,2]==2都是0。这很奇怪,因为即使p>0.06也会发生:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 19 NA NA
[2,] 2 20 0 NA NA
[3,] 2 30 0 NA NA
[4,] 2 40 0 NA NA
[5,] 1 50 11 NA NA
[6,] 2 70 0 NA NA
[7,] 2 80 0 NA NA
[8,] 2 90 0 NA NA
[9,] 1 100 7 NA NA
[10,] 2 120 0 NA NA
[11,] 2 130 0 NA NA
[12,] 2 140 0 NA NA
为什么?!怎么了?
【问题讨论】:
-
您是希望所有的if语句都按此顺序执行还是只需要执行一条if语句?
-
你是否意识到你的
p在draw[i,1]==3 or 1时不起作用 -
不应该
if (draw[i,2]==2 && p>0.06)是if (draw[i,1]==2 && p>0.06? -
天哪!谢谢谢谢,连续2天的医生编程实在是太多了! :)