Paket slider dapat digunakan untuk ini. Ini memiliki antarmuka yang telah dirancang khusus agar terasa mirip dengan purrr. Ini menerima fungsi sewenang-wenang, dan dapat mengembalikan segala jenis output. Frame data bahkan diulang lebih dari baris bijaksana. Situs pkgdown ada di sini .
library(slider)
x <- 1:3
# Mean of the current value + 1 value before it
# returned as a double vector
slide_dbl(x, ~mean(.x, na.rm = TRUE), .before = 1)
#> [1] 1.0 1.5 2.5
df <- data.frame(x = x, y = x)
# Slide row wise over data frames
slide(df, ~.x, .before = 1)
#> [[1]]
#> x y
#> 1 1 1
#>
#> [[2]]
#> x y
#> 1 1 1
#> 2 2 2
#>
#> [[3]]
#> x y
#> 1 2 2
#> 2 3 3
Overhead slider dan data.table frollapply()
harus cukup rendah (jauh lebih cepat daripada kebun binatang). frollapply()
terlihat sedikit lebih cepat untuk contoh sederhana ini di sini, tetapi perhatikan bahwa itu hanya membutuhkan input numerik, dan output harus berupa nilai numerik skalar. fungsi slider sepenuhnya generik, dan Anda dapat mengembalikan tipe data apa pun.
library(slider)
library(zoo)
library(data.table)
x <- 1:50000 + 0L
bench::mark(
slider = slide_int(x, function(x) 1L, .before = 5, .complete = TRUE),
zoo = rollapplyr(x, FUN = function(x) 1L, width = 6, fill = NA),
datatable = frollapply(x, n = 6, FUN = function(x) 1L),
iterations = 200
)
#> # A tibble: 3 x 6
#> expression min median `itr/sec` mem_alloc `gc/sec`
#> <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl>
#> 1 slider 19.82ms 26.4ms 38.4 829.8KB 19.0
#> 2 zoo 177.92ms 211.1ms 4.71 17.9MB 24.8
#> 3 datatable 7.78ms 10.9ms 87.9 807.1KB 38.7
forecast::ma
dan itu berisi semua lingkungan, tidak benar.