我想从数组的最后一个维度中删除一些元素-但先验我不知道数组的维度数,可能是2或更多。
假设要移除的元素在向量中(值不重要)
toremove <- c(2,5,6)
字符串
如果A
是我的数组,并且我知道它是三维的,那么我可以这样做
Anew <- A[, , -toremove, drop=F]
型
(其中包含drop
是为了在除了一个元素之外的所有元素都被删除的情况下保持维度),类似地,如果A
有其他维度,只需使用适当数量的逗号,
。
但是如果我不知道A
的维数呢?我希望找到一个简短、快速的解决方案,并且最好在中间步骤中不会导致A
的许多副本。
(From我所看到的,不管是最后一个还是第一个,都不重要。)
我考虑的是:
- 检查
dim(A)
并从中计算要从c(A)
中删除的所有元素的 * 绝对 * 索引;然后重新调整维度。 - 检查
dim(A)
,并对每个可能的维度逐个进行,并使用一些if
语句。 - 可能使用
do.call
,如this answer中所建议的-但我还没有设法使用这个想法:我不知道如何给予空参数,...,
到do.call
。
2条答案
按热度按时间nbewdwxp1#
有一种方法可以通过
alist
在构造的调用列表中设置空参数。如果我们这样做,例如:字符串
然后我们有一个空的list元素,我们可以将它传递给
rep
以获得多个空参数。这允许我们通过这个函数来构建我们想要的调用:型
让我们在一个虚拟的3d和4d数组上测试一下:
型
我们实际需要的函数只是额外的步骤来计算这个调用:
型
创建于2023-07-19,使用reprex v2.0.2
ndasle7k2#
如果我们在缺少逗号的地方使用
TRUE
,我的问题中的选项3似乎可以工作:字符串
我很高兴听到更好的解决方案。