【发布时间】:2019-12-29 21:17:30
【问题描述】:
我在 R 中运行这个程序时遇到问题。 有人帮我解决这个问题吗..?
par_1<-cbind(c(5.038159),c(3.899621))
par_2<-cbind(c(2.435457),c(13.89517))
tau<-365
cdf2 <- function(x, help) {
pgamma(x, shape=par_1[1], scale=par_1[2]) *
pgamma(x, shape=par_2[1], scale=par_2[2])-help
}
nextEventTime <- function(censoring) {
randomNumber <- runif(n=1, min=0, max=1)
pnew <- randomNumber * (1 - cdf2(censoring, 0)) + cdf2(censoring, 0)
uniroot(f=cdf2, interval=c(0, 1000*tau), help=pnew)$root
}
hazardRate1 <- function(t) {
dgamma(t, shape=par_1[1], scale=par_1[2]) /
(1 - pgamma(t, shape=par_1[1], scale=par_1[2]))
}
hazardRate2 <- function(t) {
dgamma(t, shape=par_2[1], scale=par_2[2]) /
(1 - pgamma(t,shape=par_2[1], scale=par_2[2]))
}
nextEventType <- function(t) {
p <- hazardRate1(t)/(hazardRate1(t)+hazardRate2(t))
randomNumber <- runif(n=1, min=0, max=1)
if (randomNumber <= p) {1} else {2}
}
baris<-c(1:20000)
nexteventtime<-rep(0,time=20000)
nexteventype<-rep(0,time=20000)
dfnexteventime<-data.frame(baris,nexteventtime,nexteventype)
for(i in 1:nrow(dfnexteventime)){
dfnexteventime$nexteventtime[i]<-nextEventTime(dfnexteventime$nexteventtime[i])
dfnexteventime$nexteventype[i]<-nextEventType(dfnexteventime$nexteventtime[i])
}
View(dfnexteventime)
当我运行这个程序时,这个程序会出错并产生这样的输出
Error in if (randomNumber <= p) { : missing value where TRUE/FALSE needed
我认为这个问题是因为nextEventType(t) 函数中的 t 值不能为零 (t!=0)。
但是nextEventTime(dfnexteventime$nexteventtime[i]) 永远不会产生零值,当我运行这部分 10 次时,
baris<-c(1:20000)
nexteventtime<-rep(0,time=20000)
nexteventype<-rep(0,time=20000)
dfnexteventime<-data.frame(baris,nexteventtime,nexteventype)
for(i in 1:nrow(dfnexteventime)){
dfnexteventime$nexteventtime[i]<-nextEventTime(dfnexteventime$nexteventtime[i])
}
没有 nextEventType 函数。这部分永远不会产生 0 值。 所以,我很困惑,什么是问题?。
我希望结果 nextEventType(t) 产生不为零的值。
因为如果使用零值将是Error in if(ramdonNumber <= p) { :...
【问题讨论】:
-
请编辑您的问题以包含一个最小但可重现的示例,即仅提供重现问题所必需且足够的详细信息。目前的问题有点宽泛,因为它需要一个人浏览整个代码。
标签: r function loops if-statement