以上用到了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
(未完!待續……)內存