将两个xts对象(矩阵)合并为R中的单个数组

|| 我有两个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
    
已邀请:
我不认为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
    
鉴于您的最新评论,我认为您可以通过以下两种方式之一来完成自己想做的事情: 将
lapply
与xts对象列表一起使用 对存储在自己环境中的xts对象使用
eapply
#2使用getSymbols的示例(注意
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
    

要回复问题请先登录注册