如何在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