憩心阁分享 http://blog.sciencenet.cn/u/zhangdong 知行合一。

博文

R中在subset函数中不要串联执行过多的判断条件

已有 4596 次阅读 2015-4-17 19:47 |系统分类:科研笔记| 效率, Subset, 判断条件

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次判断,而后面的每次判断都是在前一次判断结果基础上做出的,也就是说是在全体样本的越来越小的子集上进行的,效率相对更高。            



https://blog.sciencenet.cn/blog-247792-883262.html

上一篇:thinkpad 删除部分联想预装软件后出现MSVCP71.dll丢失错误
下一篇:中国知网打印期刊封面封底和目录
收藏 IP: 180.161.177.*| 热度|

1 余国志

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的其他最新博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-16 14:29

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部