我有两个xts对象。
> require(quantmod)
> getSymbols("GLD;SLV")
[1] "GLD" "SLV"
> head(SLV, n=2)
SLV.Open SLV.High SLV.Low SLV.Close SLV.Volume SLV.Adjusted
2007-01-03 129.96 131.16 124.70 125.58 7480000 12.56
2007-01-04 126.04 127.97 125.45 125.80 3220000 12.58
> head(GLD, n=2)
GLD.Open GLD.High GLD.Low GLD.Close GLD.Volume GLD.Adjusted
2007-01-03 63.58 64.02 62.00 62.28 8061900 62.28
2007-01-04 62.07 62.50 61.52 61.65 4858600 61.65
> NROW(SLV) == NROW(GLD)
[1] TRUE
如何将这些单独的二维矩阵“堆叠”成一个三维数组呢?
以下内容:
metal <- xts_stacking_function (GLD, SLV)
class(metal)
[1] "array"
metal[1,,1]
GLD.Open GLD.High GLD.Low GLD.Close GLD.Volume GLD.Adjusted
2007-01-03 63.58 64.02 62 62.28 8061900 62.28
答案 0 :(得分:1)
我认为xts对象不支持3d数组。您可能需要一个如下所示的丑陋解决方案。将所有内容放入数组会将内容强制转换为数值。但至少这会保留日期索引,尽管格式不同,因为数组只能有一种数据类型。
require(quantmod)
getSymbols("GLD;SLV")
GLD <- cbind(index(GLD), as.matrix(GLD))
SLV <- cbind(index(SLV), as.matrix(SLV))
C <- array(,c(dim(GLD),2))
C[,,1] <- GLD
C[,,2] <- SLV
答案 1 :(得分:1)
鉴于您的最新评论,我认为您可以通过以下两种方式之一做您想做的事:
lapply
与xts对象列表一起使用eapply
与存储在自己环境中的xts对象一起使用使用getSymbols的#2示例(注意eapply
返回一个列表):
library(quantmod)
myEnv <- new.env()
getSymbols("GLD;SLV", env=myEnv)
eapply(myEnv, function(x) head(Cl(x),3))
# $SLV
# SLV.Close
# 2007-01-03 125.58
# 2007-01-04 125.80
# 2007-01-05 121.80
#
# $GLD
# GLD.Close
# 2007-01-03 62.28
# 2007-01-04 61.65
# 2007-01-05 60.17