R:如何用这种特殊的计算填充数组?

时间:2016-03-11 15:37:57

标签: arrays r for-loop

我会用一个循环填充一个数组D,并且只有一个循环(请),我的数据以这种特殊方式构建:

 A <- data.frame(matrix(nrow=12,ncol=10))
 c_2 <- c(0.003,0.004) 
 an <- sapply(c_2,function(x) x*c(1:12))
 B <-array(an,c(12,1,2))
 set.seed(1)
 C<- rnorm(10,0.6,0.1)
 D <- array(NA,c(12,1,20))
 f_12 <- exp(c(0:11)/12)

for (k in 1:length(A)){       
          for (i in 1:dim(B)[3]){          
            for (z in 1:length(C)){
                    M_nat <- C[z]
                  A[,z] <- f_12*M_nat
                ris_1 <- A[,k]                  
             cost_1 <- B[,,i]
            prov_1 <-  cost_1*ris_1
           D[,,k*i] <- prov_1
            }           
          }
        }

我的预期结果是一个数组D,其中每个[,,z]维度是来自B[,,1]B[,,2]的结果A的每一列A 1}}在循环中。)

使用上面的代码,R结果是一个数组,其中前十个z维度已满,之后,一些具有值,其他值为NA。我哪里出错了?

1 个答案:

答案 0 :(得分:1)

outer(1:10, 1:2, "*")告诉您可以使用D[,,k*i]填写哪些索引:

#      [,1] [,2]
# [1,]    1    2
# [2,]    2    4
# [3,]    3    6
# [4,]    4    8
# [5,]    5   10
# [6,]    6   12
# [7,]    7   14
# [8,]    8   16
# [9,]    9   18
#[10,]   10   20

这些是不可能的:

(1:20)[!(1:20 %in% outer(1:10, 1:2, "*"))]
#[1] 11 13 15 17 19

事实上,D中没有填写这些元素。请注意,您不止一次填充了一些元素。

如果(i-1) * 10 + k,您可以使用k*i