如何巧妙地对 R 中具有动态维度的数组进行子集化?

How do I smartly subset an array in R with dynamic dimensions?

我正在制作一个模拟模型,我认为这个问题很容易解决,但我只是不习惯使用数组。假设我有一个数组 Array1,它有 3 个维度。前两个是恒定且等长的,L,但第三个维度的长度可以在任何给定时间从 1 到 X。

我希望能够定期对 Array1 进行子集化以创建第二个数组 Array2,它由 最后一个 Y "sheets" 共 Array1。换句话说,如果 Array1 的第三维长度大于 Y,那么我只想要 Array1 的最后 Y 张,但是,如果它小于 Y,我想要所有 [= =11=]。

我知道我可以使用 tail 函数和一些花招粗略地完成它:

tmp1 = tail(Array1, (L*L*Y))
Array2 = array(tmp1, dim = (L, L, (L*L/length(tmp1))))

但似乎可以有更优雅的方式来做到这一点。 R 中的数组是否有 tail 的等价物?或者有没有一种方法可以通过 Array1 的简单逻辑索引生成 Array2?或者也许 apply 函数可以以某种方式使用?

你在找这样的东西吗?

a <- array(1:(3*4*5), dim=c(3,4,5))
x <- dim(a)[3]
y <- 2
a[, , seq(to=x, len=min(x, y))]

, , 1

     [,1] [,2] [,3] [,4]
[1,]   37   40   43   46
[2,]   38   41   44   47
[3,]   39   42   45   48

, , 2

     [,1] [,2] [,3] [,4]
[1,]   49   52   55   58
[2,]   50   53   56   59
[3,]   51   54   57   60