【发布时间】:2015-07-02 15:52:03
【问题描述】:
R 3.1.2
library(RcppRoll)
我的数据框架
y=
V1 V2 V3 V4 V5 V6 V7 V8 V9
1 1 2 3 4 5 6 7 8 9
2 16 17 18 19 20 21 22 23 24
3 31 32 33 34 35 36 37 38 NA
4 46 47 48 49 50 51 52 53 54
我的功能:
sapply(y, RcppRoll::roll_mean, n = 3, na.rm = T)
我没有问题并且工作正常,但是使用我的大量数据时它非常慢。我想知道我们如何使用多核甚至使用 for 循环来提高 sapply 的性能?
@Khashaa 是的,我试过了,速度更快,但输出有问题:
输出:
>
[,1] [,2] [,3]
[1,] 16 17 18
这会导致我的其余代码出现问题,所以我想更改为:
V1 V2 V3
[1,] 16 17 18
对此有任何想法吗?
【问题讨论】:
-
查看 foreach 包或使用 plyr 包中的
laply函数,使用 foreach 提供的并行后端并行应用函数 -
我建议在 Rcpp 中的列上实现循环。如果您仍然需要并行化,您也可以在 C++ 级别进行(例如,参见 RcppParallel)。
-
@Barry 第一步是阅读相关文档和教程(顺便说一句。我会将你的 data.frame 设为矩阵)。
标签: r