slider::slider_index()
使用类似purrr::map()
的语法在滚动(此处为时间(窗口上应用函数。此函数的输出是一个列表。我的问题是,如何设置此列表的名称
slider_index()
函数没有像slider_index_dfr()
那样的.names_to
参数。
参见下面的可复制示例:
library(slider)
library(lubridate)
library(dplyr)
storms_summary <- storms %>%
# filter dataset so it does not eat all memory and save computing time ;)
filter(year <= 2000 & year >= 1999) %>%
# make a date column to mimic my real data
mutate(storm_date = as.Date(paste(year, month, day, sep = "-"))) %>%
arrange(storm_date) %>%
slider::slide_index(
.x = .,
.i = .$storm_date,
.f = ~ summary(.x),
.after = lubridate::weeks(2),
.complete = TRUE
)
期望的输出是列表storms_summary
,其名称是指示汇总期间的第一个和最后一个日期的字符串。用下面的代码我们得到:
> names(storms_summary)
NULL
如果无法在函数中分配名称,我们可以自己创建名称,并使用setNames
进行分配。
library(slider)
library(lubridate)
library(dplyr)
storms_summary <- storms %>%
# filter dataset so it does not eat all memory and save computing time ;)
filter(year <= 2000 & year >= 1999) %>%
# make a date column to mimic my real data
mutate(storm_date = as.Date(paste(year, month, day, sep = "-"))) %>%
arrange(storm_date) %>%
mutate(sliding_output = slider::slide_index(.x = cur_data(),
.i = storm_date,
.f = ~summary(.x),
.after = lubridate::weeks(2),
.complete = TRUE
),
names = slider::slide_index_chr(.x = storm_date,
.i = storm_date,
.f = ~paste0(range(.x), collapse = '-'),
.after = lubridate::weeks(2)),
sliding_output = setNames(sliding_output, names)) %>%
select(-names)
names(storms_summary$sliding_output)
# [1] "1999-07-02-1999-07-03" "1999-07-03-1999-07-03" "1999-07-03-1999-07-03"
# [4] "1999-07-03-1999-07-03" "1999-08-24-1999-09-07" "1999-08-24-1999-09-07"
# [7] "1999-08-24-1999-09-07" "1999-08-25-1999-09-08" "1999-08-25-1999-09-08"
#[10] "1999-08-25-1999-09-08" "1999-08-25-1999-09-08" "1999-08-26-1999-09-09"
#...
#...