r - R:对于缓慢的双 sapply,我该怎么办?
问题描述
我有一个计算可以做这个版本:
n <- 5
l <- 3
m <- seq(0,1,length.out = n)
r <- seq(3,4,length.out = n)
y <- 1:n
pp <- sapply(0:l, function(h) cumsum(y[(h+1):n]*y[1:(n-h)]))
rec.acf <- sapply(0:l, function(h) pp[[h+1]] + sapply((h+1):n, function(j) m[j] + r[j-h]) )
获得
> rec.acf
[[1]]
[1] 4.0 8.5 18.0 34.5 60.0
[[2]]
[1] 5.25 11.75 24.25 44.75
[[3]]
[1] 6.5 15.0 30.5
[[4]]
[1] 7.75 18.25
在实践中,当然,n
并且l
要大得多(并且实际函数,计算样本大小增加的自协方差,更复杂)。
当l
相对较小时,正如我所希望的那样,计算的工作速度比我制定的其他实现要快得多,这些实现没有考虑到我可以通过pp
.
然而,当l
相对于 大时,图片反转n
,可能是因为外部sapply
然后发送了许多内部循环。我的方法有什么明显效率低下的地方吗?
我修修补补mapply
,没有太大的成功。
解决方案
内循环是不必要的:
mm = lapply(0:l, function(h) tail(m, length(m) - h) + head(r, length(r) - h))
mapply("+", pp, mm)
#[[1]]
#[1] 4.0 8.5 18.0 34.5 60.0
#
#[[2]]
#[1] 5.25 11.75 24.25 44.75
#
#[[3]]
#[1] 6.5 15.0 30.5
#
#[[4]]
#[1] 7.75 18.25
推荐阅读
- apache - 将任何子域重写为 https
- javascript - 严格相等适用于变量但不适用于对象
- swift - 一次到达 NSTextField 的两个 IBOutlets
- python - 无法使用 python beautifulsoup 将 charset 1253 从 webscraping 转换为 utf-8
- javascript - 如何使用 jquery 转到我的 Electron 应用程序中的下一页或窗口
- matlab - 根据公式和表格在矩阵中对角线更改数据
- reactjs - React:Redux 状态在一个效果中更新,但同一组件中的下一个效果正在使用先前的状态值
- android - 在为此代码编写单元测试时需要帮助
- laravel - Laravel-Lumen 获取带参数的请求不起作用
- php - 如何为users.php正确设置头像自定义过滤器?