子集R数组:长度为1时维度丢失

子集R数组:长度为1时维度丢失,r,subset,R,Subset,对数组进行子集设置时,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正如您所发现的,默认情况下,R会删除不必要的维度。在索

对数组进行子集设置时,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正如您所发现的,默认情况下,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在其默认行为中有一个令人讨厌的副作用习惯:(不完全相同,但可能感兴趣: