以上用到了9个方法实现一个问题,在实现的过程当中试验数据量为n=10。获得不一样方法所用的平均耗时间大小。每种方法在计算平均耗时的重复次数为N =100。固然上述的每一个方法测试的数据量尽管相同,但因为(1)数据内容不尽相同,(2)因为测试耗时的时候后台打开的程序多少不一样(CPU和内存任务量不一样),(3)每种方法所处理的内容不尽相同。这些都对所测试的结果产生影响。为此,为了减少这些影响,本节主要经过 增长数据量大小(n)(也能够增长重复次数(N ),本例没加以讨论) 来估测每种方法的优劣。另外,为了具备可比性,如下统计结果均为处理单个数据所消耗的时间。时间单位为微秒(microsecond)
根据上述9个函数,java
#根据上述数据生成图 library(tidyverse) data<-read.csv("/home/xh/300G/笔记/R/10~1000.csv") data<-gather(data,type,mean,-c("fun","n","N")) head(data)
fun n N type mean 1 for_if 10 100 Month 1.167005 2 for_if_else 10 100 Month 0.918378 3 for_ifelse 10 100 Month 16.727339 4 for_switch 10 100 Month 1.713591 5 which 10 100 Month 5.705561 6 join 10 100 Month 183.532495
ggplot(data,aes(n,mean,color=fun))+ geom_point()+ facet_wrap(~type)+ theme(axis.text.x = element_text(angle=90))+ scale_x_continuous(name="length of vector")+ scale_y_continuous(name="time")
从上图能够看出,随着数据量的增长,处理每一个数据所需的平均时间均呈减小趋势。先不说ddply的并行运算,其它8个函数均在数据量小于250的时候,随着数据量的增长,处理每一个数据平均时间急速减小;当数据量大于250时,随着数据量的增长,处理每一个数据平均时间减小趋势逐渐放缓。函数
咱们进一步分析数据量大于250的情形:测试
ggplot(data[which(data$fun!="ddply_parallel"),],aes(n,mean,color=fun))+ geom_point()+ facet_wrap(~type)+ theme(axis.text.x = element_text(angle=90))+ scale_x_continuous(name="length of vector",limits=c(250,1000))+ scale_y_continuous(name="time",limits=c(0,80))
从上图能够看出,随着数据量的增长,每一个数据不一样方法的平均运算时间都在减小,但减速不一样,在数据量400<n<700时,处理每一个数据所需平均时间ddply最大,接下来是for_ifelse、str_replace和join,其他的几个函数所用时较小。另外一方面 ,尽管ddply等用时较长,但随着数据量的增多,所需时长递减速较大。spa
整体来讲,ddply>[for_ifelse,str_replace,for_switch]>[which,join]code
为此,咱们下一节主要讨论当数据量足够大时,这几个函数处理数据的平均 时长是何种规律。blog
(未完!待续……)内存