循环R错误:替换长度为零

时间:2018-03-30 00:53:12

标签: r runtime-error

这是我的代码,我解释了一些我认为存在问题的部分。

set.seed(5623)
t_llegada <- (1:30)
t_viaje <- (1:30)
t_intervalo<- (1:30)
#Prob. morning
pllegadaM <- rexp(30,rate=0.81)  #Prob
pviajeM <- rexp(30,rate=30.47) #Prob
pinterM<- rexp(30,rate=0.12) #Prob
#Prob afternoon
pllegadaT <- rexp(30,rate=0.096)  #Prob
pviajeT <- rexp(30,rate=31.80) #Prob
pinterT<- rexp(30,rate=0.97) #Prob
#Prob night
pllegadaN <- rexp(30,rate=0.12) #Prob
pviajeN <- rexp(30,rate=32.12) #Prob
pinterN<- rexp(30,rate=0.9) #Prob
sim <-NULL

##Dimension variables:
minutos.dia<-numeric(600)
min.llegada <- minutos.dia
min.salida <- minutos.dia
tinterval <- minutos.dia
tservicio.llegada<-minutos.dia

##Sample time with probs
tintervalM <- sample(t_intervalo,size=1, replace=TRUE, prob= pinterM)
tllegadasM <- sample(t_llegada,size=1,replace = TRUE,prob=pllegadaM) 
tviajeM <- sample(t_viaje,size=1,replace = TRUE,prob=pviajeM)
tintervalT <- sample(t_intervalo,size=1, replace=T, prob= pinterT)
tllegadasT <- sample(t_llegada,size=1,replace = TRUE,prob=pllegadaT) 
tviajeT <- sample(t_viaje,size=1,replace = TRUE,prob=pviajeT)
tintervalN <- sample(t_intervalo,size=1, replace=T, prob= pinterN)
tllegadasN <- sample(t_llegada,size=1,replace = TRUE,prob=pllegadaN) 
tviajeN <- sample(t_viaje,size=1,replace = TRUE,prob=pviajeN)

##Count first person
min.llegada[1]<- 1
tinterval[1]<- 1
min.salida[1]<-tinterval[1]+tviajeM[1] 

###Save in data frame "Sim"
uno <- data.frame (caso = 1,
               minuto_llegada = min.llegada[1],
               minuto_inicio_del_viaje = tinterval[1],
               Tiempo_viaje = tviajeM [1], 
               minuto_salida_del_cliente = min.salida[1]) 
sim <- rbind(sim, uno)

##Loop to asigne probs acording to number cases 
for (c in 2:600){
  tllegadasM[c] <- if(c <300){sample(t_llegada,size=1,replace =TRUE,prob=pllegadaM)#VAL 2
  }                     else{
sample(t_llegada,size=1,replace = TRUE,prob=pllegadaT)}

  tviajeM[c] <- if(c<300){sample(t_viaje,size=1,replace = TRUE,prob=pviajeM)#VAL 3
  }                     
  else{
sample(t_viaje,size=1,replace = TRUE,prob=pviajeT)}

  tintervalM[c]<-if(c <300){sample(t_intervalo,size=1, replace=TRUE, prob=pinterM)#VAL 2
  }                     else{
sample(t_intervalo,size=1, replace=T, prob= pinterT)
  }}

我以前打过号码aleat。到变量tintervalM,在第二个循环我接触到我只从变量aleats中选择数字。一个正义的总和。我希望得到很好的解释和帮助。

#Loop for times 
for (c in 3:600){

  min.llegada[c]<-min.llegada[c-1]+tllegadasM[c] #VAL 1 
  tinterval[c]<-if(min.llegada[c-1]>tinterval[c-1]){
tinterval[c-1]+ tintervalM[c]+tintervalM[c+1]} #VAL 2 HERE IS THE PROBLEM

  min.salida[c]<-tinterval[c]+tviajeM[c] #VAL 4

  nuevo <- data.frame (caso = c,
                   minuto_llegada = min.llegada[c],#1
                   minuto_inicio_del_viaje = tinterval[c],#2
                   Tiempo_viaje = tviajeM [c],#3
                   minuto_salida_del_cliente = min.salida[c])#4
  sim <- rbind(sim, nuevo)
}

我想确定tinterval [c-1]的优先数加上tintervalM [c]生成的数字和tintervalM [c]生成的下一个数字加到变量tinterval [c]的总和,如果min.salida [c]大于tinverval [c],但我认为错误的长度为零,

1 个答案:

答案 0 :(得分:0)

尽管不了解你的代码做了什么,我想我可以指出错误。如果if中的条件不是TRUE

,则此部分将失败
tinterval[c] <- if(min.llegada[c-1]>tinterval[c-1]){
    tinterval[c-1] + tintervalM[c] + tintervalM[c+1]
} #VAL 2 HERE IS THE PROBLEM

如果条件为FALSE,则if子句返回NULL,并且无法将其分配给tinterval[c]

我猜应该如何编写如下

if( min.llegada[c-1] > tinterval[c-1] ){
    tinterval[c] <- tinterval[c-1] + tintervalM[c] + tintervalM[c+1]
}

现在如果条件为FALSE,则没有任何反应。