【发布时间】:2021-02-10 20:10:34
【问题描述】:
假设我们有一个数组,x,维数至少为 2。我们有一个 indices 列表,我们想从 x 中检索和分配它。我想编写可以处理任意维度的x 的代码。
在 numpy 中,我们可以使用 x[indices,:] 轻松完成此操作,这适用于任意尺寸的 x。如果我们想在第一个维度以外的维度上建立索引,我们可以使用numpy.transpose 将其移动到第一个维度,然后在完成所需的索引后将其转回。在 R 中,aperm 提供等效功能。
但是,由于 R 中的索引行为略有不同,因此所需的功能似乎更难以实现。考虑:
x = array(0, c(5,4,3,2))
indices = c(1,2,3)
x[indices,]
x[1, ] 中的错误:维数不正确
使用 abind 包中的asub 解决了一半的问题,允许检索值:
asub(x, indices, 1, drop=FALSE)
除了以编程方式生成表达式x[indices,,,,],根据x 的维度插入所需的许多逗号,然后调用eval,我不确定是否有一种简单的方法来进行赋值。
有没有更好的方法可以在 R 中实现预期的结果?
【问题讨论】:
标签: r