我想创建一个空的多维数组,然后将其绑定到一个现有的数组。
如果我的数组不是空的,我可以绑定它与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)
你可以定义一个空数组,例如:
empty <- array(numeric(),c(2,3,0))
请注意,需要将至少一个维度设置为零,否则数组将根据定义包含某些内容。以一个矩阵为例,如果你定义了两个维度都大于零,你自动实例化了一个矩形结构,它不能是空的,最多只能被NAs填充。
话虽这么说,abind
的工作原理与rbind/cbind
相似,但在广义上。
因此,当rbind/cbind
将一维结构添加到二维结构时,使用abind
与三维数组一起使用,您需要向原始数组添加二维结构,因为您希望将新结构附加到所选维度。
下面是一个从三维空数组开始使用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,]
添加一个矩阵(或者一个2-dim数组,如果你喜欢)到数组的第三维,得到一个新的数组2 × 3 × 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