循环矩阵存储在多维数据集中

时间:2015-11-17 15:23:30

标签: r

我想通过矩阵循环一个方程并将结果存储在一个立方体中,这样Cube [,, 1]就是矩阵的一个结果。

我目前写了以下内容

PercentileReturn <- array(NA, c(RetAge,length(Percentile)+1,nrow(Demo)))
for (i in 1:nrow(Demo)) {
  PercentileReturn[,,i] <-
    PercentileReturn[Demo[i,3]:RetAge,
                     1:length(Percentile),1]<- 
    t(apply((apply(AnnualReturns[(Demo[i,3]):RetAge,],2,cumprod)) *
              Demo[i,4],1,function(x){quantile(x, Percentile, na.rm=T)}))
}

并导致以下错误

Error in PercentileReturn[, , i] <- PercentileReturn[Demo[i, 3]:RetAge,  : 
  number of items to replace is not a multiple of replacement length

我认为这是因为我试图插入的Matrix不是3维。

基本上,一个精简版本将有一个 数组(NA,c(2,2,3))填充矩阵乘以向量 所以说

Matrix  * vector c(1,2,3)
    [,1]    [,2]         
[1,]    4    4
[2,]    4    4

将导致以下多维数据集

, , 1       
      [,1]  [,2]
[1,]    4    4
[2,]    4    4

, , 2       
      [,1]  [,2]
[1,]    8   8
[2,]    8   8

, , 3       
       [,1] [,2]
[1,]    12  12
[2,]    12  12

2 个答案:

答案 0 :(得分:0)

那样做:

M <- matrix(1:4,2) # in your example M <- matrix(4, 2,2)
x <- 1:3    
array(sapply(x, function(xi) M*xi), c(dim(M), length(x)))

答案 1 :(得分:0)

我发现第一个错误

PercentileReturn[,,i]

还必须匹配下面写的循环数据的维度

PercentileReturn[Demo[i,3]:RetAge,1:length(Percentile),i]

感谢Jogo,我将使用类似于您在另一期刊中所写的内容。