如何使用动态尺寸巧妙地将R中的数组子集化?

时间:2015-04-14 16:32:04

标签: arrays r simulation subset

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

我希望能够定期对Array1进行分组,以创建第二个数组Array2,该数组由最后 {{ 1}}。换句话说,如果Array1的第三个维度的长度大于Y,那么我只需要Array1的最后Y张,但是如果它小于Y,我想要所有张{ {1}}。

我知道我可以粗略地使用尾部功能和一点点的结果来解决这个问题:

Array1

但似乎可以采用更优雅的方式来做到这一点。 R中的数组是否等效Array1?或者有没有办法通过简单的tmp1 = tail(Array1, (L*L*Y)) Array2 = array(tmp1, dim = (L, L, (L*L/length(tmp1)))) 逻辑索引生成tail?或者可能以某种方式使用Array2函数?

1 个答案:

答案 0 :(得分:1)

你这样做过吗?

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