我想创建一个空的多维数组,然后将其绑定到现有数组。
如果我的数组不为空,我可以将它与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)
答案 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
等等......