lapply
関数またはループでガベージ コレクションを実行する最速の方法は何ですか? 私には明白に思えることは、物事を非常に遅くします。私はそれを間違っていますか?より速い方法はありますか?
x <- 1:10000
system.time(xx <- lapply(1:length(x), function(xi) sum(x[1:xi])))
user system elapsed
0.02 0.00 0.02
system.time(xx <- lapply(1:length(x), function(xi) sum(x[1:xi], invisible(gc(v=FALSE)))))
user system elapsed
22.49 0.00 22.57 # a thousand times increase in time taken!!
私の実際のユースケースでは、関数はもう少し複雑で、gc
インスタンスごとに失敗します。RAM の多いマシンに切り替えることもできますが、便利ではありません。より高速なgc
方法が利用できるかどうか知りたいです。
更新マーティン・モーガンの提案に従って、物事をわずかに再配置すると、速度がlapply
なしに近くなりますgc
(現在は別のマシンで作業しているため、タイミングが上記とは異なります):
x <- 1:10000
system.time(x1 <- lapply(1:length(x), function(xi) sum(x[1:xi])))
user system elapsed
3.47 0.00 3.56
# define a function to make a sequence of a function followed by gc
sum_gc <- function(x) sum(x); invisible(gc(v=FALSE))
system.time(x3 <- lapply(1:length(x), function(xi) sum_gc(x[1:xi])))
user system elapsed
3.52 0.02 3.56