Почему это условие не логично? - PullRequest
0 голосов
/ 19 апреля 2020

первый вопрос здесь, поэтому будьте снисходительны к форме. Я пытаюсь узнать длину вектора, полного десятичных дробей, если я сохраняю только целые числа, что включает стирание целых чисел, когда они уже существуют. Я создал функцию 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```


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...