||
pass_fun1 <- function(transfer,gps){
nrow_transfer <- nrow(transfer)
for(i in 1:nrow_transfer){
gps_temp <- subset(gps, LINE == transfer[i,]$b_line & gps_time >= transfer[i,]$alight_time
& gps_time <= (transfer[i,]$b_ic_time+30) & ln_stop_id == transfer[i,]$b_board_stop)
transfer[i,]$pass <- length(unique(gps_temp$vehicleID))
}
return(transfer)
}
pass_fun2 <- function(transfer,gps){
nrow_transfer <- nrow(transfer)
for(i in 1:nrow_transfer){
gps_temp1 <- subset(gps,LINE == transfer[i,]$b_line)
gps_temp2 <- subset(gps_temp1, gps_time >= transfer[i,]$alight_time)
gps_temp3 <- subset(gps_temp2, gps_time <= (transfer[i,]$b_ic_time+30))
gps_temp4 <- subset(gps_temp3, ln_stop_id == transfer[i,]$b_board_stop)
transfer[i,]$pass <- length(unique(gps_temp4$vehicleID))
}
return(transfer)
}
上面两个函数执行的是同样的功能,但是pass_fun2的效率要比pass_fun1高很多,因为前者拆分成了4次判断,而后面的每次判断都是在前一次判断结果基础上做出的,也就是说是在全体样本的越来越小的子集上进行的,效率相对更高。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-5-16 14:29
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社