Я пытаюсь отобразить результаты из скользящей функции cal c, используя функцию purrr::map()
с целью построения результатов.
Вот часть моего фрейма данных (df):
ret Date Tickers
<dbl> <date> <chr>
1 0.00581 2019-01-03 A Equity
2 0.00198 2019-01-03 B Equity
3 0.00410 2019-01-03 C Equity
4 0.0134 2019-01-03 D Equity
5 0.00440 2019-01-03 E Equity
6 0.00798 2019-01-03 F Equity
7 0.00625 2019-01-03 G Equity
8 0.00278 2019-01-03 H Equity
9 -0.00841 2019-01-03 I Equity
10 -0.0174 2019-01-03 J Equity
# ... with 9,066 more rows
При попытке выполнить команду «выполнить» я получаю сообщение об ошибке "Error: No tidyselect variables were registered"
Roll_Results <-
Roll_Dates[1:3] %>%
map(~PVC_Function(df, ., Min_Valid_N = 0.8, Min_Dates = 40))
Я не включил всю функцию здесь.
Любая помощь будет принята с благодарностью.
Ниже приведен воспроизводимый пример Это не слишком основа c, но содержит все необходимые тонкости исходной задачи.
library(tidyverse)
library(PerformanceAnalytics)
library(dplyr)
library(tbl2xts)
library(lubridate)
library(tsBSS)
library(rmsfuns)
# set up the data
data <- read_csv("https://raw.githubusercontent.com/Nicktz/ExDat/master/extdata/SectorTRIs.csv")
data <-
data %>%
gather(Sectors, TRI, -Date) %>%
group_by(Sectors) %>% # Tidy up!
mutate(Returns = ((log(TRI)-log(lag(TRI))))) %>%
filter(Date > first(Date)) %>% ungroup() %>% select(-TRI) %>%
filter()
data_ts <- data %>%
tbl_xts(., cols_to_xts = "Returns", spread_by = "Sectors")
## now start setting up for the rolling function
Roll_N <- 50
Dates_To_Consider <- unique(df$Date)
r <- as.Date(rollapply(Dates_To_Consider, Roll_N, c) )
Roll_Dates <- lapply(1:nrow(r), function(i) r[i, ])
# This gives me a rolling dates list to use in map below
PVC_Foo <- function(data, Roll_Dates, Min_Valid_N = 0.8, Min_Dates = 40){
DatUse <- Roll_Dates
# following runs the PVCA and plots the results.
df_PVA <- PVC(data_ts)
Result <- list()
Result$W <- tibble( date = first(DatUse), W = df_PVA$W) %>% nest(W = W)
Result$Mu <- tibble( date = first(DatUse), Mu= df_PVA$MU) %>% nest(Mu = Mu)
Result$S <- df_PVA$S %>% xts_tbl %>% set_names(c("date", paste0("PVC", 1:ncol(df_PVA$S)) )) %>% nest(data = everything()) %>% mutate(Date = first(DatUse))
Result
}
# here is were I am having issues, I do not understand the error message that r is returning.
# ( Error: No tidyselect variables were registered )
Roll_Results <-
Roll_Dates[1] %>%
map(~PVC_Foo(df, ., Min_Valid_N = 0.8, Min_Dates = 40))
Как только я преодолею это препятствие, я планирую извлечь соответствующую информацию и сюжет с помощью
S_Matrixes_Per_Date <-
Roll_Results %>% map("S") %>% bind_rows
# Plot:
Roll_Results %>% map("S") %>% bind_rows %>% filter(Date == first(Date)) %>%
unnest(data) %>% select(-Date) %>%
gather(PVC, Value, -date) %>% filter(PVC %in% c("PVC1", "PVC2")) %>%
ggplot() + geom_line(aes(date, Value, color = PVC))