取n维数组,在r中绑定n-1维数组

取n维数组,在r中绑定n-1维数组,r,arrays,R,Arrays,我有一个n维数组,希望将n-1维数组绑定到跨一组特定维度映射的开始/结束 这里是问题的简化版本:我有一个3D数组,希望将2D数组(也称为矩阵)绑定到3D数组的末尾。具体来说,我希望2D数组的行映射到3D数组的DEP,我希望2D数组的COL映射到3D数组的COL(也称为向数组底部添加矩阵切片)。从视觉上看,如果我们想到一堆R编程书籍(3D数组),这就像是将Hadley Wickham最新的R书籍(2D数组)添加到堆栈的底部 我假设这在abind::abind()中是可能的,但我不知道怎么做。我尝试

我有一个n维数组,希望将n-1维数组绑定到跨一组特定维度映射的开始/结束

这里是问题的简化版本:我有一个3D数组,希望将2D数组(也称为矩阵)绑定到3D数组的末尾。具体来说,我希望2D数组的行映射到3D数组的DEP,我希望2D数组的COL映射到3D数组的COL(也称为向数组底部添加矩阵切片)。从视觉上看,如果我们想到一堆R编程书籍(3D数组),这就像是将Hadley Wickham最新的R书籍(2D数组)添加到堆栈的底部

我假设这在
abind::abind()
中是可能的,但我不知道怎么做。我尝试了
abind::abind(array3D,array2D,along=c(3,2))
,但是
abind::abind()
给了我一个错误,说它不允许
沿着
是多维度的。我还用
abind::abind(array3D,array2D,along=1)
尝试了“相反”的方法,但仍然得到一个错误,说尺寸不正确

作为类比,我的目标在概念上类似于rbind(矩阵、向量)

以下是一个可复制的示例:

库(abind)

array3D绑定dims大于2的数组可能会让人心神不宁,我不知道如何解释它,除了一点尝试和错误,直到关于尺寸的错误消失(并且达到预期的输出)

在本例中,您的第二次尝试已结束,提示出现在错误消息中:

arg'X2'的dims=1,4,2;但需要dims=X,2,4

4,2
2,4
(使用2D数组)对我来说听起来像是
t
转换,因此我们可以使用:

abind::abind(array3D,t(array2D),沿=1)
#,第1部
#col1 col2
#第111121行
#第2排211221
#第3排311321
#       411  421
#,第2页
#col1 col2
#第1排112 122
#第2排212 222
#第3排312 322
#       412  422
#,第3部
#col1 col2
#第113123行
#第2排213 223
#第3排313 323
#       413  423
#,第4部
#col1 col2
#第114124行
#第2排214 224
#第3排314 324
#       414  424
全部(abind::abind(array3D,t(array2D),沿=1)=desiredResult)
#[1]是的
###当然,除了名字

我不知道如何在绑定调用中保留结果数组上的名称(粗略检查时,没有参数组合)。通过一些手工工作实现自动化应该是可行的,但目前我想不出一种容易实现自动化的方法。

这也适用于值,但不像上面的答案那样紧凑:
aperm(abind(aperm(array3D,3:1),array2D),3:1)
啊,我明白了。我需要排列一个数组以匹配另一个数组。因此,每当使用
abind::abind()
绑定数组时,似乎都需要首先检查数组的排列。然后,
沿
将是n-1维数组没有的n维数组的维数。有道理。谢谢你们两位的快速回复!这里有一个简单的函数,可以帮助确定是否需要/如何排列数组,以便通过
abind::abind()
arrayBindTest David绑定,如果这回答了您的问题,请(选中标记,投票箭头下左上角)。它不仅为回答者提供了一些观点,还为那些提出类似问题的读者提供了一个结尾。是的,您对需要验证尺寸的解释是正确的,类似于线性代数,其中只能(例如)乘以兼容矩阵;同样,在这样做时,您需要验证重新排列的逻辑,以确保行/列/“层”(?)仍然一致。