优化R程序性能

性能测量

system.time()时间测定

Rprof和profr性能分析

R语言性能监控工具Rprof
How to efficiently use Rprof in R?

library(profr)
#日志存放路径
file<-"fun1_rprof.out"
Rprof(file)
trainAndtest(mp_id[1])#被检测程序
Rprof(NULL)
#显示日志
summaryRprof(file)
#图形化
plot(parse_rprof(file))
ggplot(parse_rprof(file))

by.self: 当前函数的耗时情况

by.total :整体函数调用的耗时情况

这里写图片描述

gc()监控内存使用

参考博客:R的内存管理:rm()和gc()共用释放占用的内存

优化R代码

向量操作

用循环算平方与直接调用向量操作比较

#迭代法
vative.vector.of.squares <- function(n){
  v <- 1:n
  for(i in 1:n)
    v[i] <- v[i]^2
  v
}

system.time(vative.vector.of.squares(10000))

system.time(vative.vector.of.squares(10000000))
> system.time(vative.vector.of.squares(10000))
   user  system elapsed 
  0.029   0.000   0.029 
> system.time(vative.vector.of.squares(10000000))
   user  system elapsed 
 15.354   0.080  15.423 

发现消耗的时间会随着响亮的长度(n)线性的增长。

#向量操作
better.vector.of.squares <- function(n){
  (1:n)^2
}

system.time(better.vector.of.squares(10000))

system.time(better.vector.of.squares(10000000))
> system.time(better.vector.of.squares(10000))
   user  system elapsed 
      0       0       0 
> system.time(better.vector.of.squares(10000000))
   user  system elapsed 
  0.227   0.050   0.277 

这里的^是直接用C语言或者Fortran语言实现的,不需要通过R的解释器来计算,只需要调用一次底层库就可以得到结果。很多常用的数学函数都包含在R的原声函数中,大部分情况下,这些函数都是通过调用外部的代数运算库来实现的。

使用内置函数

R中的查找性能

> data
a b c 
1 2 3 
  1. 通过下标查找O(1)
  2. 通过名字标签查找,使用单括号查找操作符: O(n)
  3. 通过名字标签查找,使用双括号查找操作符进行精确查询: O(1) data[[‘a’]]
  4. 通过名字标签查找,使用双括号查找操作符进行模糊查询: O(1) data[[‘a’,exact=FALSE]]
  5. 通过名字标签查找,使用环境:平均为O(1)
    get(data=’a’,envir=env)

尽量使用[[来查找精确值x[[1]],x[[‘a’]]速度较快。p(541)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值