如何创建和绑定空的多维数组

时间:2015-08-15 06:13:30

标签: arrays r multidimensional-array

我想创建一个空的多维数组,然后将其绑定到现有数组。

如果我的数组不为空,我可以将它与abind包绑定:

library(abind)
c=matrix(0,2,3)
test=array(0,c(2,3,1))
test2=abind(test,c,along=3)
test2 #exactly what I expected
, , 1

     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0

, , 2

     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0

现在我想做同样的事情,除了两个完整的数组,我希望其中一个是空的。如果我有角色会发生这种情况:

test3=character() #this is empty
test3=c(test3,'hi') #I bind the word hi to it
test3
[1] "hi"

如果我尝试使用数组,这不完全有效:

empty=array()
abind(empty,test,along=3)
Error in abind(empty, test, along = 3) : 
'X1' does not fit: should have `length(dim())'=3 or 2

所以我假设array()不是你如何创建一个空的多维数组。

请注意两个命令之间的差异:

empty=array()
> empty
[1] NA
test3=character()
> test3
character(0)

1 个答案:

答案 0 :(得分:6)

您可以通过以下方式定义一个空数组:

empty <- array(numeric(),c(2,3,0)) 

请注意,您需要 将至少一个维度设置为零 ,否则数组将按定义包含某些内容。例如,考虑一个矩阵,如果你定义两个维度大于零,你自动实例化一个矩形结构,它不能为空,最多可以由NA填充。

话虽如此,abind的工作方式与rbind/cbind类似,但却是一般化的 因此,当rbind/cbind将一维结构添加到二维结构时,使用带有三维数组的abind,您需要向原始数组添加二维结构,因为您希望将新结构附加到所选维度

以下是从3维空数组开始的abind用法示例:

创建一个空数组2 x 3 x 0:

a <- array(numeric(),c(2,3,0)) 

> a
<2 x 3 x 0 array of double>
     [,1] [,2] [,3]
[1,]
[2,]

将一个矩阵(或两个dim数组,如果您愿意)附加到数组的第三维,获得一个新的数组2 x 3 x 1:

a <- abind(a, matrix(5,nrow=2,ncol=3), along=3)

> a
, , 1

     [,1] [,2] [,3]
[1,]    5    5    5
[2,]    5    5    5

再次附加一个矩阵(或者如果你愿意,可以选择一个2-dim数组)到前一个数组的第三维,获得一个新的数组2 x 3 x 2:

a <- abind(a, matrix(7,nrow=2,ncol=3), along=3)

> a
, , 1

     [,1] [,2] [,3]
[1,]    5    5    5
[2,]    5    5    5

, , 2

     [,1] [,2] [,3]
[1,]    7    7    7
[2,]    7    7    7

等等......