我会用一个循环填充一个数组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。我哪里出错了?
答案 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
。