Как мне обойти повторяющиеся функции, которые используют разные даты? - PullRequest
1 голос
/ 02 мая 2019

Мне нужно, чтобы моя функция работала с определенным периодом на складе, например, AKER["2013-11-19/2018-11-19"], с октября 2013 года по октябрь 2018. И затем снова работаю, НО на этот раз ближе к году, который я установилвот так AKER["2014-11-19/2018-11-19"].А потом опять.И снова.

Вот что я получил:

resistence_line_by_volume <- function(x) {
open_prices <- x[,1]
close_prices <- x[,4]
volume_amount <- x[,5]
average_open_and_close <- (open_prices + close_prices)/2
weighet_price_volume <- (average_open_and_close*volume_amount)/sum(volume_amount)
result <- sum(weighet_price_volume)
result
}

getSymbols("AKER")
[1] "AKER"

 resistence_line_by_volume(AKER["2013-11-19/2018-11-19")
[1] 3.353938

resistence_line_by_volume(AKER["2014-11-19/2018-11-19")
[1] 3.319899

resistence_line_by_volume(AKER["2015-11-19/2018-11-19")
[1] 3.290728

resistence_line_by_volume(AKER["2016-11-19/2018-11-19")
[1] 3.256264

resistence_line_by_volume(AKER["2017-11-19/2018-11-19")
[1] 3.191081

И вот что мне нужно (некоторая версия этого):

resistence_line_by_volume(AKER["2013-11-19/2018-11-19")
[1] 3.353938
[2] 3.319899
[3] 3.290728
[4] 3.256264
[5] 3.191081

Как мне повторять все эти функции с каждым годом ближе?

1 Ответ

1 голос
/ 02 мая 2019

Если число дат ограничено, мы можем вручную создать вектор дат

library(quantmod)
dates <- c("2013-11-19/2018-11-19","2014-11-19/2018-11-19","2015-11-19/2018-11-19",
           "2016-11-19/2018-11-19", "2017-11-19/2018-11-19")

, а затем использовать любой метод циклического цикла для циклического перебора dates (sapply, lapply, map, for цикл и т. Д.)

sapply(dates, function(x) resistence_line_by_volume(AKER[x]), USE.NAMES = FALSE)
#[1] 3.327881 3.294591 3.266057 3.232329 3.168454

Или мы также можем генерировать даты программно, используя seq

dates <- paste(seq(as.Date("2013-11-19"), length.out = 5, by = "year"),
               "2018-11-19", sep = "/")

sapply(dates, function(x) resistence_line_by_volume(AKER[x]), USE.NAMES = FALSE)
#[1] 3.327881 3.294591 3.266057 3.232329 3.168454
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...