如何在R中正确使用drop=F来保持子集剖分时的矩阵结构

如何在R中正确使用drop=F来保持子集剖分时的矩阵结构,r,subset,R,Subset,我想在子集后保留矩阵(或数组)结构,据我所知,这是通过参数drop=F实现的。然而,情况似乎并非如此: > m = matrix(1:8, 4) # Toy example > m [,1] [,2] [1,] 1 5 [2,] 2 6 [3,] 3 7 [4,] 4 8 > is.matrix(m[1:2,]) # Subsetting first 2 rows yiel

我想在子集后保留矩阵(或数组)结构,据我所知,这是通过参数
drop=F
实现的。然而,情况似乎并非如此:

> m = matrix(1:8, 4)             # Toy example
> m
     [,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8
> is.matrix(m[1:2,])             # Subsetting first 2 rows yields a matrix
[1] TRUE
> is.matrix(m[1,])               # Subsetting just one row yields a vector
[1] FALSE
> is.matrix(m[1,,drop=F])        # drop=F does not help!
[1] FALSE

根据
?逻辑

TRUE和FALSE是表示R中逻辑常数的保留字 语言,而T和F是全局变量,其初始值 设置为这些。所有四个都是逻辑(1)向量

因此,正如我们在评论中提到的,如果我们在前面创建一个带有“F”的对象,然后使用
drop=F
,这将导致特定的问题

F <- 1
is.matrix(m[1,,drop=F]) 
#[1] FALSE

TRUE中的错误对于我来说,它返回TRUE,即
is.matrix(m[1,drop=F])#[1]TRUE
可能是您有一个先前定义的对象,即在R3.1.3上选中
F,它返回TRUE。所以,我猜这个物体有问题assignment@jogo
>is.matrix(m[1,drop=FALSE])[1]TRUE
发生了什么事?@jogo它起作用了
>m=matrix(1:8,4)>是.matrix(m[1,drop=F])[1]真的
TRUE <- 5
FALSE <- 1
is.matrix(m[1,,drop=FALSE]) 
#[1] TRUE