繁体   English   中英

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

[英]Loop R error: replacement has length zero

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

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,在第二个循环中,我只想从变量aleat中选择数字。 一个公正的总和。 我希望能得到很好的解释和帮助。

#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],但我发现错误的长度为零,

尽管不了解您的代码的作用,但我认为我可以指出该错误。 这部分将失败,如果在条件中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,则什么也不会发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM