【问题标题】:Loop Matrix to store in Cube循环矩阵存储在多维数据集中
【发布时间】:2015-11-17 15:23:30
【问题描述】:

我想通过一个矩阵循环一个方程并将结果存储在一个立方体中,这样 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

我认为这是因为我尝试插入的矩阵不是 3 维的。

基本上一个精简的版本是有一个 array(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

【问题讨论】:

    标签: r


    【解决方案1】:

    这样就可以了:

    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)))
    

    【讨论】:

    • 你知道我如何将它与第一部分代码联系起来吗?这就是我的问题所在,并且给了我长度错误,基本上循环在第一个向量上运行,然后停止
    • 抱歉,没有数据就无法重现。而且只看代码代码很棘手。最终,使用返回数组的函数(M,x)是个好主意。
    【解决方案2】:

    我第一个发现错误

    PercentileReturn[,,i]
    

    还必须匹配下面写为

    的循环数据的维度
    PercentileReturn[Demo[i,3]:RetAge,1:length(Percentile),i]
    

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

    【讨论】:

      猜你喜欢
      • 2019-08-03
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多