первый вопрос здесь, поэтому будьте снисходительны к форме. Я пытаюсь узнать длину вектора, полного десятичных дробей, если я сохраняю только целые числа, что включает стирание целых чисел, когда они уже существуют. Я создал функцию if для сохранения определенных строк в векторе «row to keep», если они соответствуют условию, которое является логическим. К сожалению, после некоторого времени в циклах for, где стоит функция if, условие имеет значение NA, поэтому это сообщение возвращает: ошибка в случае, если пропущено значение, где требуется значение true / false. Есть идеи почему? Спасибо за вашу помощь и, в случае необходимости, дайте мне совет, чтобы вопрос был яснее.
epidemies_time <-c(1:epidemies_nb)
time_code <- for (epid_idx in 1:epidemies_nb)
{
time_trunc<-trunc(time)
row_to_keep<-rep(FALSE,taille)
row_to_keep[1] <- TRUE
dayafterday <- for (time_idx in 2:taille) {
if (time_trunc[time_idx] != time_trunc[time_idx-1]) {`
row_to_keep[time_idx-1] <- TRUE
if (time_idx > 2) {
time_trunc[time_idx-1] <- time_trunc[time_idx-1] + 1
}
time_trunc <- time_trunc[row_to_keep]
duree<- length(time_trunc)
epidemies_time[epid_idx]<-duree
} } }
PS: я пропустил все бесполезные части сценария в этой проблеме, но если вам это нужно или вам интересно, как я могу получить вектор "времени", здесь также лежит весь код, но я уверен, что он работает
suscept<-rep(0,taille)
infect<-rep(0,taille)
remov<-rep(0,taille)
time<-rep(0,taille)
nvcas<-rep(0,taille)
pop_susc <- 0.1
infect[1]<-5
suscept[1]<- pop_susc*taille - infect[1]
remov[1]<- taille - infect[1]+suscept[1]
beta<-0.0000524
alpha<-0.4
epidemies_nb <- 60
epidemies_time <-c(1:epidemies_nb)
time_code <- for (epid_idx in 1:epidemies_nb)
{
modele_epid <- for(ind_idx in 1:(taille-1))
{
if(infect[ind_idx]!=0)
{
s<--log(runif(1))/(beta*suscept[ind_idx]*infect[ind_idx]+alpha*infect[ind_idx])
time[ind_idx+1]<-time[ind_idx]+s
rand<-runif(1)
proba<-beta*suscept[ind_idx]*infect[ind_idx]/(beta*suscept[ind_idx]*infect[ind_idx]+alpha*infect[ind_idx])
if (rand<=proba)
{
suscept[ind_idx+1]<-suscept[ind_idx]-1
infect[ind_idx+1]<-infect[ind_idx]+1
remov[ind_idx+1]<-remov[ind_idx]
nvcas[ind_idx+1]<-1
}
if (rand>proba)
{
suscept[ind_idx+1]<-suscept[ind_idx]
infect[ind_idx+1]<-infect[ind_idx]-1
remov[ind_idx+1]<-remov[ind_idx]+1
nvcas[ind_idx+1]<-0
}
}
}
time_trunc<-trunc(time)
row_to_keep<-rep(FALSE,taille)
row_to_keep[1] <- TRUE
dayafterday <- for (time_idx in 2:taille) {
if (time_trunc[time_idx] != time_trunc[time_idx-1]) {
row_to_keep[time_idx-1] <- TRUE
if (time_idx > 2) {
time_trunc[time_idx-1] <- time_trunc[time_idx-1] + 1
}
time_trunc <- time_trunc[row_to_keep]
duree<- length(time_trunc)
epidemies_time[epid_idx]<-duree
}
}
}
epidemies_time```