我想从使用 getSymbols 获得的时间序列中提取日期,但是当我使用 index / index.xts 函数时,返回的日期似乎早了一天。我无法理解为什么在以下代码中会发生这种行为。
但是,预期的行为是获取与原始时间序列中的对象相对应的日期对象列表。
这是代码,请注意时间序列 SPY 的最后一个日期是 2012 年 8 月 24 日,但 index(SPY) 调用的最后一个值是 2012 年 8 月 23 日:
getSymbols("SPY")
tail(SPY)
SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted
2012-08-17 142.23 142.30 141.86 142.18 90813700 142.18
2012-08-20 141.98 142.22 141.59 142.19 78255700 142.19
2012-08-21 142.54 143.09 141.45 141.76 105581100 141.76
2012-08-22 141.40 142.05 141.07 141.82 132999200 141.82
2012-08-23 141.47 141.48 140.44 140.66 111406800 140.66
2012-08-24 140.31 141.83 140.22 141.51 99431500 141.51
tail(index(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
tail(index.xts(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
感谢所有可以回复我帖子的人。
会议的附加信息
>sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rbenchmark_0.3.1 fGarch_2110.80.1
[3] fBasics_2160.81 MASS_7.3-20
[5] timeSeries_2160.95 timeDate_2160.95
[7] tseries_0.10-29 quadprog_1.5-4
[9] PerformanceAnalytics_1.0.4.4 quantstrat_0.6.8
[11] blotter_0.8.10 FinancialInstrument_0.15.2
[13] quantmod_0.3-17 TTR_0.21-1
[15] Defaults_1.1-1 xts_0.8-6
[17] zoo_1.7-7 lubridate_1.1.0
[19] stringr_0.6.1 plyr_1.7.1
[21] XML_3.9-4.1
loaded via a namespace (and not attached):
[1] colorspace_1.1-1 dichromat_1.2-4 digest_0.5.2 ggplot2_0.9.1
[5] grid_2.15.1 labeling_0.2 lattice_0.20-6 memoise_0.1
[9] munsell_0.3 proto_0.3-9.2 RColorBrewer_1.0-5 reshape2_1.2.1
[13] scales_0.2.1 stabledist_0.6-4 tools_2.15.1
> getDefaults(getSymbols)
NULL
> getSymbolLookup("SPY")
NULL
> showSymbols()
SPY GSPC IBM XLF XLP XLE XLY XLV XLI
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
XLB XLK XLU IEF AAPL DIA MSFT IWM EEM
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
EFA GLD AGG HYG FXE FXY VXX VXZ HIG
"yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo" "yahoo"
VTI VEU VNQ DBC XAU gold Gold STOXX50E GOLD
"yahoo" "yahoo" "yahoo" "yahoo" "oanda" "oanda" "oanda" "yahoo" "yahoo"
VIX DEXUSEU EURUSD DEXKOUS EUR=X INR=X
"yahoo" "FRED" "oanda" "FRED" "yahoo" "yahoo"
另请注意,我通过使用命令安装了来自 Systematic Investor 博客 systeminvestor.wordpress.com 的一些 R 代码
setInternet2(TRUE)
con = gzcon(url('systematicportfolio.com/sit.gz', 'rb'))
source(con)
close(con)
解决方案加上附加问题
GSee 用户找到了答案(谢谢!)指出在我的会话中我屏蔽了 index.xts。所以一个解决方案是调用 xts:::index.xts(SPY) 而不仅仅是 index.xts(SPY) 来覆盖屏蔽。实际上命令
> tail(xts:::index.xts(SPY))
返回正确答案
[1] “2012-08-17” “2012-08-20” “2012-08-21” “2012-08-22” “2012-08-23” “2012-08-24” –</p>
答案现在引发了另一个问题:在“屏蔽/覆盖” index.xts 函数的代码下方给出(返回错误的答案,将日期提前一天):
> index.xts
function (
x # XTS object
)
{
temp = attr(x, 'index')
class(temp)='POSIXct'
if( attr(x, '.indexCLASS')[1] == 'Date')
temp = as.Date(temp)
return(temp)
}
为什么这个函数在调用 tail(index.xts(SPY)) 时返回错误的结果?这个 index.xts 函数的代码有什么问题?
比较两个输出(第一个是错误的,而第二个提供正确的答案):
tail(index.xts(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
tail(xts:::index.xts(SPY))
[1] "2012-08-17" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23" "2012-08-24"
再次感谢您的时间和关注。