r - 矩阵在向量中改变
问题描述
我有一个矩阵 [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]
解决方案
简短的回答:
添加drop=FALSE
方式mat[i,j,drop=FALSE]
长答案:
摘自John Chambers的《数据分析软件》第 202-203 页:
[W]注意选择单行或单列。在这种情况下,存在一些关于用户是否想要矩阵结果或包含单行或单列的向量的问题。提供了这两个选项,并且选择由 '[' 运算符的特殊参数控制drop=
。如果是TRUE
,则单行和单列的维度会被“删除”,返回一个向量;否则总是返回一个矩阵。默认是并且一直是drop=TRUE
;很久以前,这可能是我们的一个不明智的决定,但现在是那些不太可能改变的向后兼容性负担之一。
同样,Norman Matloff在他的《R 编程的艺术》一书中将第 4.6 节(解决此问题的部分)命名为“降维:一个错误还是一个特性?”。
推荐阅读
- reactjs - 我无法从我的 firebase firestore 数据库中删除单个文档
- xml - 如果满足模板条件,则显示一次段落 - Xsl 1
- javascript - 过滤带有日期的对象数组
- java - 休息并行调用服务-Java中的多线程
- google-cloud-platform - GCP - TPU 训练因数据增强而变得太慢
- sql - 从数据库表创建结果网格:SQL
- python - Tkinter:检测一个正在运行的进程并在一个进程运行时锁定所有其他按钮?
- javascript - nodejs Worker_thread vs Promise.all 或 allSettled()
- c# - 多对多查询单个数据关系
- webrtc - TURN 服务器:对于给定的网络,总是或从不需要,还是不可预测地需要?