Цель: вычислить стохастик с тремя различными значениями для nFastK
для всех переменных, использующих пакеты TTR :: stoch и tidyquant.
Тема 1: Сообщение об ошибке
Фрагмент ниже работает, но выдает ошибку
с опцией: ограниченный = ИСТИНА. В чем причина ошибки?
rm(list = ls())
library(tidyquant)
library(lubridate)
my_data <- tibble( Symbol = as_factor(c( rep("a", 100), rep("b", 100)))
, Date = rep( ymd("2017-11-14") + 7 * (0:99), 2) # weekly
, major = c (10000 + sample(-800:300, 100), (8000 + sample(-100:900, 100)))
, v1 = sample(-1000:1000, 200 ) / 100
, v2 = sample(-100:1200, 200) / 100
)
my_final <- my_data %>%
gather( -Date, -Symbol, key = "kkeys", value = "wwords") %>%
mutate(kkeys = as_factor(kkeys)) %>%
group_by(Symbol, kkeys) %>%
tq_mutate(
# tq_mutate args
select = wwords,
mutate_fun = stoch,
# args to mutate_fun
nFastK = 10
# , bounded = FALSE # <- uncomment this line for error!
) %>%
select( -wwords, -fastD, -stoch ) %>%
mutate( fastK = round(fastK, digits = 2)) %>%
spread( kkeys, fastK)
Тема 2: Функциональное программирование по этому вопросу.
цикл for выдает три значения nFastK
вызывая выше, а затем переименовывая и
Правое присоединение к финальному столу, вот так.
Это лишь краткая иллюстрация моего исходного кода:
my_periods <- c(5, 10, 20)
my_vars <- my_data %>% select (-Date, -Symbol) %>% colnames()
my_final <- my_data
for (i in seq_along(my_periods)) {
# Create unique Colnames
my_vars_to <- str_c( my_vars, "_pk", my_periods[i])
my_final <-
my_data %>%
# Do all of the above from topic 1 plus this
rename_at( vars(my_vars), ~ my_vars_to) %>%
right_join(my_final, by = c("Symbol", "Date"))
}
Этот цикл работает и дает мне то, что я хочу. Все еще находясь на крутой кривой обучения, есть два вопроса:
Вопрос 1: Прим. Для Wickham с решениями, предоставленными Арнольдом, предварительное распределение работает быстрее. Как должен быть написан этот код для предварительного выделения памяти по сравнению с right_join ()? Или это правильное решение? Я посмотрел на https://jrnold.github.io/r4ds-exercise-solutions/iteration.html
Вопрос 2: Прочитав несколько уроков, purrr :: map ()
представляется целесообразным вместо цикла for.
Даже после прочтения уроков и вопросов я не могу понять, как правильно их написать. Не могли бы вы привести пример или указать направление для дальнейшего чтения?
Наконец:
Спасибо всем за помощь в виде примеров, виньеток и других сообщений. Это, вероятно, одно из самых активных, полезных и знающих сообществ, с которыми я когда-либо сталкивался. Как новый пользователь R, я ценю множество примеров на stackoverflow и любых других веб-сайтах. Это мой первый пост. Спасибо, А.