【发布时间】:2019-12-06 02:54:48
【问题描述】:
使用下面的循环,我可以创建一个包含 4 个矩阵的数组。是否有任何函数可以在没有 for 循环的情况下创建这个数组。使用外部函数,我可以单独创建矩阵。
time=c(0,0.5,0.7)
beta=matrix(1:40, nrow=5, ncol=8)
array_mat <- array(NA, dim = c(5, 3, 4))
for (i in 1:5) {
for (j in 1:3) {
for (k in 1:4) {
array_mat[i, j, k] <- beta[i, k * 2 - 1] + beta[i, k * 2] * time[j]
}
}
}
输出是
array_mat
, , 1
[,1] [,2] [,3]
[1,] 1 4.0 5.2
[2,] 2 5.5 6.9
[3,] 3 7.0 8.6
[4,] 4 8.5 10.3
[5,] 5 10.0 12.0
, , 2
[,1] [,2] [,3]
[1,] 11 19.0 22.2
[2,] 12 20.5 23.9
[3,] 13 22.0 25.6
[4,] 14 23.5 27.3
[5,] 15 25.0 29.0
, , 3
[,1] [,2] [,3]
[1,] 21 34.0 39.2
[2,] 22 35.5 40.9
[3,] 23 37.0 42.6
[4,] 24 38.5 44.3
[5,] 25 40.0 46.0
, , 4
[,1] [,2] [,3]
[1,] 31 49.0 56.2
[2,] 32 50.5 57.9
[3,] 33 52.0 59.6
[4,] 34 53.5 61.3
[5,] 35 55.0 63.0
我可以在不使用 for 循环或使用任何其他函数的情况下做到这一点吗?感谢你的帮助。
【问题讨论】:
-
@akrun 我可以使用 outer() 函数创建四个矩阵中的任何一个。我正在寻找像 outer() 这样的函数或任何其他函数来创建这个矩阵数组。
-
在那种情况下
out <- crossing(v1 = 1:5, v2 = 1:3, v3 = 1:4) %>% pmap_dbl(~ beta[..1, ..3 * 2 - 1] + beta[..1, ..3 * 2] * time[..2]) -
您会只对一个循环感兴趣吗?
-
我很想看看循环。 @RuiBarradas