deadcheck<-function(a,t){ #function to check if dead for specific age at a time age sending to function
roe<-which( birthmort$age[i]==fertmortc$min & fertmortc$max) #checks row in fertmortc(hart) to pick an age that meets min and max age requirements I think this could be wrong...
prob<-1-(((1-fertmortc$mortality[roe])^(1/365))^t) #finds the prob for the row that meets the above requirements
if(runif(1,0,1)<=prob) {d<-TRUE} else {d<-FALSE} #I have a row that has the probability of death every 7 days.
return(d) #outputs if dead
背景:我正在创建一个基于代理的模型,该模型是数据框中的一个人口,模拟结核病在人口中的传播方式。 (我知道可能有10000种更好的方法可以做到这一点)。到目前为止,我已经创建了一个循环,用我的年龄等人填充我的数据框。我现在正在尝试创建一个函数,该图将根据年龄段列出每年死亡概率的图表。 0-5,5-10,10-15等(我有数学在那里b / c我想要检查谁住,死,每7天生婴儿)。我有一个类似的功能,检查谁怀孕,它的工作原理。但是,对于我的生活,我无法弄清楚为什么这个功能不起作用。我一直收到以下错误。 if(runif(1,0,1)&lt; = prob){:参数的长度为零时出错 我不确定如何解决这个问题。
我道歉,这是一个愚蠢的问题,我一直试图在过去的4-5个月里自学编码。如果我以错误的格式或错误地提出这个问题,那么请让我知道如何正确地做到这一点。
答案 0 :(得分:0)
prob
的值为零长度。这意味着
prob = NULL
在这种情况下。尝试打印更改代码并添加
print(prob)
所以你可以检查部分结果。
答案 1 :(得分:0)
正如您在评论中所怀疑的那样,表达式
birthmort$age[i]==fertmortc$min & fertmortc$max
有问题。这样做是评估比较birthmort$age[i]==fertmortc$min
,然后获取该比较的结果,并使用和运算符将其与fertmortc$max
组合。这涉及形成一个布尔值和一个整数,这不太可能有意义。
猜猜,你可能想要:
birthmort$age[i] >= fertmortc$min & birthmort$age[i] <= fertmortc$max
我不知道这是否能解决您的问题 - 您没有给予足够的测试。为获得最佳帮助,您应该提供可重复的示例。有关如何在R
中执行此操作,请参阅this