是否可以选择具有二维二进制数组的三维数组的子集?我希望能够这样做,以便我可以将值推入选择
例如我有一个数组dim(a)=(lat,long,time),我想用dim(b)=(lat,long)选择,这是一个充满TRUE / FALSE值的数组。我希望能够做到这样的事情:
> a <- array(c(1,2,3,4,5,6,7,8),c(2,2,2))
> b <- matrix(c(0,1,0,0), c(2,2))==TRUE
> a[[b]] <- 0
> a
, , 1
[,1] [,2]
[1,] 1 3
[2,] 0 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 0 8
编辑:好的,所以这看起来像一个愚蠢的问题,因为我刚刚意识到如果使用a[b] <- 0
(单括号),它的工作方式完全如上所述。但是,只有当您想要跨越的尺寸是最后的尺寸时,这才有效。所以,为了让它更有趣:
如果要跨越的尺寸是第一维或第二维,您如何做到这一点 - 例如。如果昏暗(b)==(纬度,年份)?
答案 0 :(得分:4)
R支持使用[
运算符的数组的矩阵子集(即单括号,而不是double - 双括号将始终只返回单个元素):
a[b] <- 0
a
, , 1
[,1] [,2]
[1,] 1 3
[2,] 0 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 0 8
请注意,这与您在问题中指定的结果略有不同。在您的问题中,第二个元素(即矩阵的左下角元素)是1,因此您可以期望修改每个数组切片的第二个元素。 (换句话说,不是第一个,就像你的例子中那样。)