Почему TTR :: SMA возвращает NA для первого элемента ряда, когда n = 1? - PullRequest
0 голосов
/ 11 декабря 2018

Это то, на что я смотрю:

library(TTR)
test <- c(1:10)
test <- SMA(test, n=1)
test
 [1] NA  2  3  4  5  6  7  8  9 10

Причина, по которой я спрашиваю, на самом деле, что у меня есть скрипт, который позволяет вам определить n:

library(TTR)
test <- c(1:10)
Index_Transformation <- 1 #1 means no transformation to the series
test <- SMA(test, n = Index_Transformation)
test
 [1] NA  2  3  4  5  6  7  8  9 10

Есть лиспособ, которым я могу заставить функцию SMA возвращать первый элемент серии, когда "n = 1" вместо NA?

Большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете использовать rollmean вместо zoo пакета

library(zoo)
rollmean(test, 1)
#[1]  1  2  3  4  8  6  7  8  9 10

Просто из любопытства я изучал функцию SMA, она вызывает функцию runMean для внутреннего использования.Так что если вы сделаете

runMean(test, 1)
# [1] NA  2  3  4  5  6  7  8  9 10

, это все равно даст тот же результат.

Далее, runMean звонит runSum таким образом

runSum(x, n)/n

Так что если вы сейчас сделаете

runSum(test, 1)
#[1] NA  2  3  4  5  6  7  8  9 10

, то все равно NA.Теперь runSum - очень большая функция, из которой генерируется оригинал NA.

Так что, если вам все еще придется упорствовать в использовании функции SMA, вы можете добавить дополнительную проверку if, говоря

if (Index_Transformation > 1) # OR (Index_Transformation != 1)
   test <- SMA(test, n = Index_Transformation)

Таким образом, test изменяется только в том случае, если Index_Transformation больше 1 и остается таким же, как если бы оно было 1.

...