任何人都可以向我解释为什么这段代码的分发:
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")
我觉得它与if-else语句的逻辑有关。该代码的目标是模拟马尔可夫链的感染模型
答案 0 :(得分:0)
第一个示例包含嵌套在if else
语句中的if
对。
第二个示例包含具有复合条件的if
语句。
粗略回顾一下,看起来每个例子应该做同样的事情。此代码用作嵌套if
语句可以用复合条件重写为if
语句的示例。
例如,在示例1中,当我们到达这行代码时:
if(r < 0.04)
{
InfectionHistory[x+1] <- 2
}
我们已经知道了
InfectionHistory[x]==1
已返回true
,否则我们不会在检查此条件的if
的正文中。
在第二个例子中,这只是重写为:
if((InfectionHistory[x]==1)&&(r < 0.04))
{
InfectionHistory[x+1] <- 2
}
编辑:再看一遍,第二个例子似乎没有处理的案例:
else
{
InfectionHistory[x+1] <- InfectionHistory[x]
}
在第一个例子中重复这段代码。它与两个嵌套的if
语句配对。可以使用简单的if else if else
结构轻松地重写第二个示例以处理此问题。例如:
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]
}