本節把前面全部數據綜合起來進行分析。1000<n<1000000。java
數據格式與前面的同樣。如下是做圖代碼。在本圖中,因爲數據的數量級差有些大,因此用對數座標畫圖。函數
library(tidyverse) library(scales) ggplot(data[which(data$fun!="ddply_parallel"),],aes(n,mean,color=fun))+ geom_point()+ facet_wrap(~type,ncol=1)+ theme(axis.text.x = element_text(angle=90))+ scale_x_continuous(name="length of vector", trans = log10_trans(), breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x)))+ scale_y_continuous(name="time (microsecond)", trans = log10_trans(), breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x)))+ coord_flip()
從上圖能夠看出,對於All,Month或Season來講,這8個函數中,隨着數據量的增長,ddply,join,str_replace和which處理單個數據所需時間急速降低,隨着數據量的繼續增長,ddply 在n=10000時有一個明顯的拐點。對於for_if,for_if_else,for_ifelse和for_switch來講,隨數據量的增長,處理每一個數據所需時間變化相對較小,而且沒有明顯的拐點。所以,在處理數據量小於10000的時候,選擇哪一個函數區別不是很明顯,但當數據量大於100000,最好選擇which和join函數。另外,對於for系列函數,隨數據量的增長,每一個數據處理平均時間變化比較平穩。spa
截止目前,除了並行運算,其它函數的運行效率已基本總結完畢。3d
這個專題暫告一段落。有空再續……code