Bob*_*ant 3 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
Run Code Online (Sandbox Code Playgroud)
现在我想做同样的事情,除了两个完整的数组,我希望其中一个是空的.如果我有角色会发生什么:
test3=character() #this is empty
test3=c(test3,'hi') #I bind the word hi to it
test3
[1] "hi"
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用数组,这不完全有效:
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
Run Code Online (Sandbox Code Playgroud)
所以我假设array()你不是如何创建一个空的多维数组.
请注意两个命令之间的差异:
empty=array()
> empty
[1] NA
test3=character()
> test3
character(0)
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式定义一个空数组:
empty <- array(numeric(),c(2,3,0))
Run Code Online (Sandbox Code Playgroud)
请注意,您需要将至少一个维度设置为零,否则数组将按定义包含某些内容.例如,想一个矩阵,如果你定义两个尺寸都大于零,你自动实例化一个矩形结构,它不能为空,最多可以由NA填充.
话虽这么说,abind就像rbind/cbind而是一个广义的方式.
因此,当rbind/cbind将一维结构添加到二维结构时,使用abind三维数组,您需要向原始数组添加二维结构,因为您要将新结构附加到所选维度.
以下是abind从3维空数组开始的用法示例:
创建一个空数组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,]
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以将矩阵(或2-dim数组)附加到数组的第3维,从而获得新的数组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
Run Code Online (Sandbox Code Playgroud)
再次附加一个矩阵(或者如果你愿意,可以是一个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
Run Code Online (Sandbox Code Playgroud)
等等......