我想在子集后保留矩阵(或数组)结构,这是我的理解是,这是通过参数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
根据 ?logical
True and Fals和False是表示R中逻辑常数的保留单词 语言,而T和F是全球变量的初始值 设置为这些。这四个都是逻辑(1)向量。
因此,正如我们在评论中提到的那样,如果我们较早地使用" 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