我想在子集化后保留矩阵(或数组)结构,我的理解是这是通过参数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
答案 0 :(得分:2)
根据?logical
TRUE和FALSE是表示R中逻辑常量的保留字 语言,而T和F是其初始值的全局变量 设置为这些。这四个都是逻辑(1)向量。
因此,正如我们在评论中提到的,如果我们使用&f;#F;之前然后使用drop=F
,这将导致特定问题
F <- 1
is.matrix(m[1,,drop=F])
#[1] FALSE
对于这个特殊问题,最好使用TRUE/FALSE
而不是子串T/F
,因为我们不能将保留字分配为对象名,即
TRUE <- 5
TRUE错误&lt; - 5:无效(do_set)左侧分配
FALSE <- 1
FALSE错误&lt; - 1:无效(do_set)左侧分配
is.matrix(m[1,,drop=FALSE])
#[1] TRUE