我每天下载2个股票历史,追溯到2000年:
library(quantmod)
check <- c("FB","GOOG")
getSymbols(check, from='2000-01-01')
隔离最后价格:
close <- cbind(Cl(GOOG),Cl(FB))
现在我想在非常好的'TTR'包中使用一些工具,例如SMA
:
smacheck <- SMA(close,50)
Error in `colnames<-`(`*tmp*`, value = c("GOOG.Close.SMA.50", "FB.Close.SMA.50":
length of 'dimnames' [2] not equal to array extent
FB
的历史记录短于GOOG
。无论NA什么时候开始,我如何让这两种股票一起工作?
答案 0 :(得分:3)
这与缺失的值无关。 SMA
目前不适用于具有多个列的对象。您需要分别在每列上运行SMA
。
library(quantmod)
e <- new.env()
getSymbols('GOOG;FB', from='2000-01-01', env=e)
smacheck <- do.call(merge, eapply(e, function(x) SMA(Cl(x), 50)))
答案 1 :(得分:1)
您可以使用apply
功能
SMAs <- xts(apply(close, MARGIN = 2, FUN = "SMA", n = 50), index(close))
head(SMAs)
## GOOG.Close FB.Close
## 2004-08-19 NA NA
## 2004-08-20 NA NA
## 2004-08-23 NA NA
## 2004-08-24 NA NA
## 2004-08-25 NA NA
## 2004-08-26 NA NA
tail(SMAs)
## GOOG.Close FB.Close
## 2013-10-29 899.6198 46.7544
## 2013-10-30 902.9198 46.9664
## 2013-10-31 906.1448 47.2042
## 2013-11-01 909.2114 47.4282
## 2013-11-04 912.3294 47.5816
## 2013-11-05 915.4320 47.7570