Let’s solve the problem but let’s not make it worse by guessing. —Gene Kranz, Apollo13 Lead Flight Director. 带着策略解决问题,而不是盲目猜测问题的所在
作用:测试某个函数或者代码块运行时间,实用于已经知道哪一块代码运行问题 返回 pro_time 类对象,包含 user time 和 elapsed time 区别是:
system.time(readLines("http://baidu.com"))#花费更多的时间连接网站,而不是cpu处理上
## user system elapsed
## 0.02 0.00 0.07
memoise 是一个非常简单的缓存包,以本地为基础,减少重复计算。当以相同的参数对同一个函数执行第二次计算的时候,可以直接用第一次计算过的结果作为计算结果。主要接口函数有memoize 和forget
library(memoise)
## Warning: package 'memoise' was built under R version 3.4.4
func1 <- memoise(function(){
Sys.sleep(1)
runif(1)
}
)
system.time(func1())
## user system elapsed
## 0 0 1
system.time(func1())#第二次在对这个相同表达式求解不需要话时间
## user system elapsed
## 0.03 0.00 0.03
forget(func1) #清除缓存
## [1] TRUE
system.time(func1)
## user system elapsed
## 0 0 0
Rprof()函数用于打印函数的调用关系和cpu的耗时数据,然后通过summaryRprof函数分析数据产生性能报告($by.total、$by.self),左后使用profr库中的plot()函数可视化。
bidpx1<-read.csv(file="000000_0.txt",header=FALSE) #读取数据
#交易日期、交易时间、股票ID、买一价、买一量、卖一价、卖一量。
names(bidpx1)<-c("tradedate","tradetime","securityid",
"bidpx1","bidsize1","offerpx1","offersize1")
bidpx1$securityid<-as.factor(bidpx1$securityid) #将彩票id转化成因子
head(bidpx1) #查看前6行
## tradedate tradetime securityid bidpx1 bidsize1 offerpx1 offersize1
## 1 20130724 145004 131810 2.620 6960 2.630 13000
## 2 20130724 145101 131810 2.860 13880 2.890 6270
## 3 20130724 145128 131810 2.850 327400 2.851 1500
## 4 20130724 145143 131810 2.603 44630 2.800 10650
## 5 20130724 144831 131810 2.890 11400 3.000 77990
## 6 20130724 145222 131810 2.600 1071370 2.601 35750
object.size(bidpx1) #查看文件大小
## 1299920 bytes
#以股票ID分组计算每小时买一价的平均值和买一量的总量
library(plyr)
fun1<-function(){
datehour<-paste(bidpx1$tradedate, #paste("20130724", "14")
substr(bidpx1$tradetime,1,2),sep="")
df<-cbind(datehour,bidpx1[,3:5]) #按列合并
ddply(bidpx1,.(securityid,datehour),summarize,price = mean(bidpx1),size = sum(bidsize1))
}
head(fun1())
## securityid datehour price size
## 1 131810 2013072210 3.445549 189670150
## 2 131810 2013072211 3.437179 131948670
## 3 131810 2013072212 3.421000 920
## 4 131810 2013072213 3.509442 299554430
## 5 131810 2013072214 3.578667 195130420
## 6 131810 2013072215 1.833000 718940
system.time(fun1()) #以system.time()查看fun1函数运行时间
file<-"fun1_rprof.out" #定义性能日志函数的输出文件位置
Rprof(file) #开始性能监控
fun1() #执行计算函数
## securityid datehour price size
## 1 131810 2013072210 3.445549 189670150
## 2 131810 2013072211 3.437179 131948670
## 3 131810 2013072212 3.421000 920
## 4 131810 2013072213 3.509442 299554430
## 5 131810 2013072214 3.578667 195130420
## 6 131810 2013072215 1.833000 718940
## 7 131810 2013072291 3.065455 491000
## 8 131810 2013072292 3.026667 2227990
## 9 131810 2013072293 3.330828 37514930
## 10 131810 2013072294 3.338376 20283800
## 11 131810 2013072295 3.342809 38649440
## 12 131810 2013072310 3.830267 237682910
## 13 131810 2013072311 3.936353 119724960
## 14 131810 2013072312 3.990000 58800
## 15 131810 2013072313 4.068245 214767910
## 16 131810 2013072314 3.543290 158247180
## 17 131810 2013072393 3.761250 271620
## 18 131810 2013072394 3.773298 40314570
## 19 131810 2013072395 3.737437 35177690
## 20 131810 2013072410 4.361410 259186900
## 21 131810 2013072411 4.397561 71576130
## 22 131810 2013072412 4.440000 2340
## 23 131810 2013072413 4.330937 151206420
## 24 131810 2013072414 3.475491 169496740
## 25 131810 2013072492 3.000000 379020
## 26 131810 2013072493 4.203207 44831440
## 27 131810 2013072494 4.375304 27003880
## 28 131810 2013072495 4.294196 75757040
## 29 131810 2013072510 10.829361 187127520
## 30 131810 2013072511 10.522720 70739720
## 31 131810 2013072513 9.188874 148373360
## 32 131810 2013072514 8.969589 140509850
## 33 131810 2013072595 9.951193 64061440
## 34 131810 2013072610 6.286461 169360480
## 35 131810 2013072611 6.306957 115884190
## 36 131810 2013072613 5.945383 268580750
## 37 131810 2013072614 7.369312 320091580
## 38 131810 2013072692 4.680000 865470
## 39 131810 2013072693 5.575728 154505050
## 40 131810 2013072694 6.218843 44064260
## 41 131810 2013072695 6.271617 24524560
## 42 204001 2013072210 3.534034 40347200
## 43 204001 2013072211 3.559335 25029600
## 44 204001 2013072213 3.578888 66225000
## 45 204001 2013072214 3.644361 66401000
## 46 204001 2013072215 0.000000 0
## 47 204001 2013072291 2.993333 667400
## 48 204001 2013072292 3.119804 3690000
## 49 204001 2013072293 3.454435 9431800
## 50 204001 2013072294 3.470826 9187000
## 51 204001 2013072295 3.463120 5223300
## 52 204001 2013072310 3.904744 54618200
## 53 204001 2013072311 4.023328 35100800
## 54 204001 2013072313 4.211417 54181500
## 55 204001 2013072314 3.623404 56021700
## 56 204001 2013072393 3.775000 57600
## 57 204001 2013072394 3.772265 6070400
## 58 204001 2013072395 3.751387 6995800
## 59 204001 2013072410 4.433898 43408000
## 60 204001 2013072411 4.491526 28419400
## 61 204001 2013072413 4.341446 47058300
## 62 204001 2013072414 3.544172 39087400
## 63 204001 2013072492 3.750000 358500
## 64 204001 2013072493 4.248534 8846100
## 65 204001 2013072494 4.414348 4763900
## 66 204001 2013072495 4.453596 11579700
## 67 204001 2013072510 11.183619 46916400
## 68 204001 2013072511 10.608099 16110300
## 69 204001 2013072513 9.330178 29484900
## 70 204001 2013072514 9.531541 41721100
## 71 204001 2013072595 10.114272 10037100
## 72 204001 2013072610 6.293475 57224000
## 73 204001 2013072611 6.305592 30969900
## 74 204001 2013072613 6.017185 54548000
## 75 204001 2013072614 7.884802 50368400
## 76 204001 2013072692 5.200000 441400
## 77 204001 2013072693 5.718964 10008500
## 78 204001 2013072694 6.520219 13391400
## 79 204001 2013072695 6.531557 14724000
Rprof(NULL) #停止执行监控,并输出文件
summaryRprof(file) #通过summaryRprof函数解析这个监控文件
## $by.self
## self.time self.pct total.time total.pct
## ".External" 0.06 50.00 0.06 50.00
## "$" 0.02 16.67 0.02 16.67
## "mean" 0.02 16.67 0.02 16.67
## "paste" 0.02 16.67 0.02 16.67
##
## $by.total
## total.time total.pct self.time self.pct
## "block_exec" 0.12 100.00 0.00 0.00
## "call_block" 0.12 100.00 0.00 0.00
## "knitr::knit" 0.12 100.00 0.00 0.00
## "process_file" 0.12 100.00 0.00 0.00
## "process_group" 0.12 100.00 0.00 0.00
## "process_group.block" 0.12 100.00 0.00 0.00
## "rmarkdown::render" 0.12 100.00 0.00 0.00
## "withCallingHandlers" 0.12 100.00 0.00 0.00
## ".External" 0.06 50.00 0.06 50.00
## "<Anonymous>" 0.04 33.33 0.00 0.00
## "dev.off" 0.04 33.33 0.00 0.00
## "eval" 0.04 33.33 0.00 0.00
## "evaluate" 0.04 33.33 0.00 0.00
## "evaluate_call" 0.04 33.33 0.00 0.00
## "fun1" 0.04 33.33 0.00 0.00
## "handle" 0.04 33.33 0.00 0.00
## "in_dir" 0.04 33.33 0.00 0.00
## "timing_fn" 0.04 33.33 0.00 0.00
## "withVisible" 0.04 33.33 0.00 0.00
## "$" 0.02 16.67 0.02 16.67
## "mean" 0.02 16.67 0.02 16.67
## "paste" 0.02 16.67 0.02 16.67
## ".Call" 0.02 16.67 0.00 0.00
## ".fun" 0.02 16.67 0.00 0.00
## "chunk_device" 0.02 16.67 0.00 0.00
## "ddply" 0.02 16.67 0.00 0.00
## "dev_new" 0.02 16.67 0.00 0.00
## "do.call" 0.02 16.67 0.00 0.00
## "ldply" 0.02 16.67 0.00 0.00
## "llply" 0.02 16.67 0.00 0.00
## "loop_apply" 0.02 16.67 0.00 0.00
##
## $sample.interval
## [1] 0.02
##
## $sampling.time
## [1] 0.12
# install.packages("profvis")
library(profvis)
## Warning: package 'profvis' was built under R version 3.4.4
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.4.3
p <- profvis({
data(diamonds, package = "ggplot2")
plot(price ~ carat, data = diamonds)
m <- lm(price ~ carat, data = diamonds)
abline(m, col = "red")
})
htmlwidgets::saveWidget(p, "title.html") #可以保存到工作空间下html文件