gpt4 book ai didi

r - 使用sapply时如何应用多核?

转载 作者:行者123 更新时间:2023-12-04 10:50:45 25 4
gpt4 key购买 nike

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

有什么想法吗?

最佳答案

在这个具体的例子中,你不需要sapply。只需 roll_mean(as.matrix(y), 3, na.rm=T) 就足够了

y <- runif(1e7) 
dim(y) <- c(1e3, 1e4)
y <- data.frame(y)
system.time(sapply(y, RcppRoll::roll_mean, n = 3, na.rm = T))
# user system elapsed
# 14.120 0.451 18.960
system.time(RcppRoll::roll_mean(as.matrix(y), 3, na.rm=T))
# user system elapsed
# 0.329 0.000 0.329
# About 60x times faster

sapply 结果的唯一区别是 colnames ,您可以按如下方式更改

res <- RcppRoll::roll_mean(as.matrix(y), 3, na.rm=T)
colnames(res) <- colnames(y)
res
# V1 V2 V3 V4 V5 V6 V7 V8 V9
#[1,] 16 17 18 19 20 21 22 23 16.5
#[2,] 31 32 33 34 35 36 37 38 39.0

关于r - 使用sapply时如何应用多核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31189219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com