r-在滑块中设置输出列表名称::slide_index()



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"
#...
#...

最新更新