1. R語言運行效率分析_小結(3)

小結(3)

以上用到了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")

31.png從上圖能夠看出,隨着數據量的增長,處理每一個數據所需的平均時間均呈減小趨勢。先不說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))

32.png從上圖能夠看出,隨着數據量的增長,每一個數據不一樣方法的平均運算時間都在減小,但減速不一樣,在數據量400<n<700時,處理每一個數據所需平均時間ddply最大,接下來是for_ifelse、str_replace和join,其他的幾個函數所用時較小。另外一方面 ,儘管ddply等用時較長,但隨着數據量的增多,所需時長遞減速較大。spa

整體來講,ddply>[for_ifelse,str_replace,for_switch]>[which,join]code

爲此,咱們下一節主要討論當數據量足夠大時,這幾個函數處理數據的平均 時長是何種規律。blog

(未完!待續……)內存

相關文章
相關標籤/搜索