如何在R中正确使用drop = f在子集时保留矩阵结构

  • 本文关键字:子集 保留 结构 drop 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 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

最新更新