R是函数式编程语言,其中向量化编程思维是其中的一个精髓,正确使用它能帮你省掉一些不必要的代码,并大幅提升运算效率。首先我们来看看什么是向量化计算。
向量化计算
向量化计算是一种特殊的并行计算的方式,相比于一般程序在同一时间只执行一个操作的方式,它可以在同一时间执行多次操作,通常是对不同的数据执行同样的一个或一批指令,或者说把指令应用于一个数组或者向量。
我们来看看在R中的向量化计算:
正如你看到的,向量化计算在R中的表现形式就是这么简单。下面我们来用一个简单的例子做测试看看向量化计算对计算效率的提升效果。
计算一个数组的平方和
循环版
如果你刚接触R或者从其他语言转过来,可能你会写如下的for循环代码:
向量化版
它有一种更为简便的写法,直接采用base包中自带的sum函数来求和。
我们对以上两种写法做性能测试发现,当计算的向量达到百万级别时,以上两者效率相差竟超过30倍。
以上代码是在win10系统上运行的,电脑配置的i5处理器以及8G内存,R是64位3.2.5版本。
所以,当我们在编写涉及到循环运算的代码时尽量采用一些向量化的函数对其进行处理,少些显式循环,这样既可以减少代码量,使得代码更为简洁,还可以大幅提高代码的运行效率,何乐而不为呢?
R中的向量化计算可以通过一些向量化的函数实现,下面介绍一下向量化计算的一些常用函数:
向量化函数分类
我把向量化的函数分为以下三类:
1.base自带函数向量操作
sum
mean
max
min
median
cumsum
cummax
cummin
cumprod
逻辑操作
any
all
ifelse
矩阵操作
colSums
colMeans
rowSums
rowMeans
2.apply函数簇
apply
可以对矩阵或者数组的同一维度应用相同的函数并得到汇总后的结果。下面我们用来实现上述矩阵操作类似的功能:
中的函数除了采用系统自带的函数外,还可以自行定义:
sapply
对每个元素应用相同的函数,有点像python里面的map函数:
lapply
对list类型的数据做操作
aggregate
数据汇总
3.plyr以及dplyr高级函数簇小结
以上大多数向量化函数计算效率高的本质是其底层做了并行计算。我们在实际运用这些函数的时候,需要了解其适用场景,因地制宜,方能真正实现效率最大化。
本文来自№→★飞刀的微信公共帐号“数据挖掘与R语言”,用微信添加数据挖掘与R语言公众号,即可订阅。
领取专属 10元无门槛券
私享最新 技术干货