目标:使用nFastK的三个不同值来计算随机性 使用TTR :: stoch和tidyquant包的所有变量。
以下代码段有效,但会引发错误 使用选项:bounded = TRUE。错误的原因是什么?
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)
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而言,Arnold提供了解决方案,预分配的运行速度更快。与right_join()相比,该代码将如何编写以预分配内存?还是这是一个好的解决方案?我看着https://jrnold.github.io/r4ds-exercise-solutions/iteration.html
问题2:阅读了一些教程之后,purrr :: map() 似乎比for循环更合适。 即使在这里阅读了教程和问题之后,我仍然无法理解如何正确编写它。您能提供一个例子还是指向更多阅读的方向?
通过示例,小插图和其他文章感谢您的所有帮助。这可能是我遇到过的最活跃,有用和知识渊博的社区之一。作为R的新用户,我感谢stackoverflow和其他任何网站上的许多示例。这是我的第一篇文章。谢谢,A