If statement If-Else逻辑流

If statement If-Else逻辑流,if-statement,logic,pseudocode,If Statement,Logic,Pseudocode,有人能向我解释一下为什么要发布此代码: InfectionHistory <- rep(1,100) for(x in 1:99) { r <- runif(1) print(r) if(InfectionHistory[x]==1) { if(r < 0.04) { InfectionHistory[x+1] <- 2 } else { InfectionHistory[x+1] <-

有人能向我解释一下为什么要发布此代码:

InfectionHistory <- rep(1,100)
for(x in 1:99)
{
  r <- runif(1)
  print(r)
  if(InfectionHistory[x]==1)
  {
    if(r < 0.04)
    {
      InfectionHistory[x+1] <- 2
    }
    else
    {
      InfectionHistory[x+1] <- InfectionHistory[x]
    }
  }
  if(InfectionHistory[x]==2)
  {
    if(r < 0.11)
    {
      InfectionHistory[x+1] <- 1
    }
    else
    {
      InfectionHistory[x+1] <- InfectionHistory[x]
    }
  }
}
plot(InfectionHistory, xlab = "Day", ylab = "State", main = "Patient Status per Day", type = "o")
InfectionHistory <- rep(1,100)
for(x in 1:99)
{
  r <- runif(1)
  print(r)
  if((InfectionHistory[x]==1)&&(r < 0.04))
  {
    InfectionHistory[x+1] <- 2
  }
  if((InfectionHistory[x]==2)&&(r < 0.11))
  {
    InfectionHistory[x+1] <- 1 
  }
}
plot(InfectionHistory, xlab = "Day", ylab = "State", main = "Patient Status per Day", type = "o")

InfectionHistory第一个示例包含嵌套在
if
语句中的
if-else

第二个示例包含带有复合条件的
if
语句

粗略回顾一下,看起来每个示例都应该做相同的事情。此代码作为一个示例,嵌套的
if
语句可以重写为具有复合条件的
if
语句

例如,在示例1中,当我们看到这行代码时:

if(r < 0.04)
{
  InfectionHistory[x+1] <- 2
}
已返回
true
,否则我们将不在检查此条件的
主体内

在第二个示例中,这简单地重写为:

if((InfectionHistory[x]==1)&&(r < 0.04))
{
    InfectionHistory[x+1] <- 2
}

是的,但我想知道是什么导致了频率上的巨大差异。Ex 1比Ex 2在感染史中给出更多的2。是什么导致了这种情况?根据我的理解,如果这两段代码是逻辑等价的,那么它们应该返回非常相似的1和2的分布。@user2938366我对感染模型或马尔可夫链一无所知。您是否尝试过将示例2更改为我答案中的最后一个代码块?
if((InfectionHistory[x]==1)&&(r < 0.04))
{
    InfectionHistory[x+1] <- 2
}
else
{
  InfectionHistory[x+1] <- InfectionHistory[x]
}
if((InfectionHistory[x]==1)&&(r < 0.04))
{
    InfectionHistory[x+1] <- 2
}
else if((InfectionHistory[x]==2)&&(r < 0.11))
{
    InfectionHistory[x+1] <- 1 
}
else
{
    InfectionHistory[x+1] <- InfectionHistory[x]
}