gpt4 book ai didi

r - 子集 R 数组 : dimension lost when its length is 1

转载 作者:行者123 更新时间:2023-12-04 05:25:13 25 4
gpt4 key购买 nike

对数组进行子集化时,R 的行为取决于其中一个维度的长度是否为 1。如果维度的长度为 1,则该维度在子集化过程中会丢失:

ax <- array(1:24, c(2,3,4))
ay <- array(1:12, c(1,3,4))
dim(ax)
#[1] 2 3 4
dim(ay)
#[1] 1 3 4
dim(ax[,1:2,])
#[1] 2 2 4
dim(ay[,1:2,])
#[1] 2 4

在我看来, ax 和 y 是相同的,对它们执行相同的子集操作应该返回一个具有相同维度的数组。我可以看到 R 处理这两种情况的方式可能很有用,但在我编写的代码中是不可取的。这意味着当我将一个子集数组传递给另一个函数时,该函数将得到一个缺少维度的数组,如果我碰巧在早期阶段将维度减少到长度 1。 (所以在这种情况下,R 的灵活性使我的代码不那么灵活!)

如何防止 R 在子集化过程中丢失长度为 1 的维度?还有另一种索引方式吗?要设置一些标志?

最佳答案

正如您发现的那样,默认情况下 R 会删除不必要的维度。添加 drop=FALSE而索引可以防止这种情况:

> dim(ay[,1:2,])
[1] 2 4
> dim(ax[,1:2,])
[1] 2 2 4
> dim(ay[,1:2,,drop = F])
[1] 1 2 4

关于r - 子集 R 数组 : dimension lost when its length is 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com