首页 > 解决方案 > 矩阵在向量中改变

问题描述

我有一个矩阵 [1,n],我想了解为什么当我删除它的一些值时它会在向量中改变自己。

这是我的问题的示例:

> mat<-matrix(seq(1:10),1,10)
> mat
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    2    3    4    5    6    7    8    9    10

mat是一个矩阵 [1,10]

> mat<-mat[,which(mat[1,]!=10)]
> mat
[1] 1 2 3 4 5 6 7 8 9

mat现在是一个向量 [9]

标签: rmatrixvector

解决方案


简短的回答:

添加drop=FALSE方式mat[i,j,drop=FALSE]


长答案:

摘自John Chambers的《数据分析软件》第 202-203 页:

[W]注意选择单行或单列。在这种情况下,存在一些关于用户是否想要矩阵结果或包含单行或单列的向量的问题。提供了这两个选项,并且选择由 '[' 运算符的特殊参数控制drop=。如果是TRUE,则单行和单列的维度会被“删除”,返回一个向量;否则总是返回一个矩阵。默认是并且一直是drop=TRUE;很久以前,这可能是我们的一个不明智的决定,但现在是那些不太可能改变的向后兼容性负担之一。

同样,Norman Matloff在他的《R 编程的艺术》一书中将第 4.6 节(解决此问题的部分)命名为“降维:一个错误还是一个特性?”。


推荐阅读