数据结构
之前刚开始用R时常使用data.frame来为主要的数据结构。因为以data.frame为对象比矩阵什么更加灵活,就像一个excel表一样。但是,在data.frame上用进行矩阵操作会比matrix要慢。所以尽可能的用matrix代替data.frame或者用vector存储再组合成data.frame。以一个简单的例子比较data.frame和matrix进行矩阵操作的速度差异。
dataMatrix <- matrix(rnorm(1E4*1000), nrow=1000) ##生成矩阵
dataFrame <- as.data.frame(dataMatrix) ##另存数据框格式
system.time(data_rst <- apply(dataMatrix, 1, mean)) ##矩阵
用户 系统 流逝
0.308 0.032 0.340
system.time(data_rst <- apply(dataFrame, 1, mean)) ##数据框
用户 系统 流逝
0.468 0.144 0.613
可以看出data.frame格式比起Matrix格式速度慢上一倍左右。所以尽量使用更加简单的数据格式进行数据操作。
*pply簇
*pply簇相比与for循环在R中速度要快,无聊时可以尝试一下,它并且能够有效的缩减代码量和使代码更加容易修改。apply还有另外的好处是可揭示R的内在并行性。
- 在parallel包中,它提供了parSapply(), parApply(), parLapply()函数,它们分别对应这sapply,apply,lapply,它使得我们可以快速方便的进行并行运算,并且它是很多并行运算包的基础。此外,它的parSapplyLB(), parApplyLB(), parLapplyLB()还提供负载均衡,即当每个并行任务花费的时间都不相同时,十分管用。