R语言矩阵维度“消失”的问题

矩阵(matrix)是R语言中很基础的一种数据结构,也是R语言使用者经常使用的一种数据结构。矩阵的维度一般为二维(m*n)。

R语言中矩阵的操作是非常简单易懂的,但是在对R语言做矩阵操作时,有个地方需要特别注意。下面我们通过一个例子说明。

首先,我们创建一个用于测试的矩阵。

test1 <- matrix(data = c(1:6), nrow = 3, ncol = 2, dimnames = list(c("row1", "row2", "row3"), c("col1", "col2")))

然后我们查看下这个矩阵,矩阵是一个三行两列的矩阵。

> test1
     col1 col2
row1    1    4
row2    2    5
row3    3    6

然后,我们任意取出它们的子矩阵并使用dim()函数查看子矩阵的维度。

> dim(test1[1:2, ]); test1[1:2, ]
[1] 2 2
     col1 col2
row1    1    4
row2    2    5
> dim(test1[2, ]); test1[2, ]
NULL
col1 col2
   2    5

我们发现第一次取出某个维度为2*2的子矩阵时,系统正确返回了子矩阵的维度,而当我们第二次取出一个维度为1*2的子矩阵时,系统却未能正确返回子矩阵的维度且维度为NULL。很显然,R语言将这个子矩阵当成向量处理了,因此维度也“消失”了。这个是非常需要注意的,笔者日常使用R语言分析数据的时候,也不经意间落入过这个“圈套”,有时候感觉代码逻辑上没有任何的错误,但当运行程序的时候,就会出现这个某个令人不解的error,然后需要花上一点时间慢慢debug,然后恍然大悟,原来是这个原因。

解决或者说避免出现这个问题也是非常简单的,我们可以直接使用drop参数。

> # using the drop parameter
> dim(test1[2, , drop = FALSE])
[1] 1 2

我们可以看到,将drop参数设为FALSE之后,R语言能够正确返回矩阵的维度了。

原文地址:https://www.cnblogs.com/rxzhang/p/12299142.html

时间: 2024-11-09 16:25:21

R语言矩阵维度“消失”的问题的相关文章

R语言--矩阵相关函数

R矩阵介绍:  is.matrix()可以判断是否是矩阵,as.matrix()可以将数据框转换成矩阵,但是矩阵中要求所有的数据格式都是一致. 1.可以使用matrix()创建新的矩阵,但是要输入一些参数可以通过      args(matrix)      知道需要什么参数结果如下:function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)     例: mm<-matrix(c(1,2,3, 11,12,1

R语言矩阵栅格显示矩阵颜色显示

效果如下:

R语言学习中的小bug:R中矩阵相乘错误于A %*% B: 需要数值/复数矩阵/矢量参数

遇到了小bug: R中矩阵相乘错误于A %*% B: 需要数值/复数矩阵/矢量参数 看到网上别人的做法,发现了用class(A)和class(B)之后才发现,是因为读入的时候数据的类型不对,A.B的类型并不是matrix,才导致了这个问题. 用as.matrix来变型一下,就OK了. R语言学习中的小bug:R中矩阵相乘错误于A %*% B: 需要数值/复数矩阵/矢量参数,布布扣,bubuko.com

使用R语言为矩阵(表格)的行列命名

转自:http://www.dataguru.cn/article-2217-1.html R语言中经常进行矩阵(表格)数据的处理,在纷繁复杂的数据中,为其行列定义一个名字变得尤为重要.在处理巨量数据时,批量命名将是一个不错的操作方法,下面我们通过一些具体的例子演示怎样在R语言中为矩阵的行列进行批量的命名. > x <- matrix(1:12,nrow=3,byrow=T) 初始化一个矩阵,先行后列的顺序进行填充 > x 查看矩阵x   [,1] [,2] [,3] [,4] [1,]

《R语言入门》矩阵元素定义及筛选

<R语言入门>目录: 如何在Windows下安装R语言编程环境 矩阵元素定义及筛选 和向量一样,矩阵也可以做筛选.但是需要注意一下语法上的不同.下面是一个简单的例子: 以下代码用户定义一个矩阵元素变量"si",ncol=3(三列),byrow = TRUE(数据按行输入) 使用"<-"小于号减号作为操作符 si <- matrix(c(1, 1, 1, 2, 3, 1, 3, 4, 1, 5, 1, 3), ncol = 3, byrow =

R 语言数据结构 --2 矩阵和数据框①矩阵-matrix

矩阵-matrix-2018年6月9日 今天很可惜,没有过多地学习R语言(主要因为去听了党课,学习了党重要讲话,所以没有看书),所以今天就总结一个矩阵吧.不过多的学习了. 首先稍微复习一下昨天的因子,首先要记得的就是mode()看每个元素,class()看整体是什么,另外如果你把TRUE abc 1都传给一个向量,那向量会把它进行类型转换.安全性:字符串>数字>逻辑值.会尽量向安全性高的转换.这个是隐式类型转换.当然也可以用as家族进行类型转化,例如将数字转换成字符串:as.character

从零开始系列-R语言基础学习笔记之二 数据结构(一)

在上一篇中我们一起学习了R语言的环境搭建,这次我们开始学习R语言的数据结构第一部分:向量.数组和矩阵. 一.向量 向量是一维数组,其内容可以是数值.字符或布尔值,但所有数据的类型必须一致.创建向量使用的关键字是c,访问向量中的元素使用[],具体如下: 创建数值向量a<-c(1,2,3,4,5,6) 创建字符向量b<-c("a","b","c") 创建布尔向量c<-c(TRUE,FALSE) 访问向量: a[3] 得到的值是3,注

【数据分析 R语言实战】学习笔记 第三章 数据预处理 (下)

3.3缺失值处理 R中缺失值以NA表示,判断数据是否存在缺失值的函数有两个,最基本的函数是is.na()它可以应用于向量.数据框等多种对象,返回逻辑值. > attach(data) The following objects are masked fromdata (pos = 3): city, price, salary > data$salary=replace(salary,salary>5,NA) > is.na(salary) [1] FALSEFALSE TRUE

R语言结合概率统计的体系分析---数字特征

现在有一个人,如何对这个人怎么识别这个人?那么就对其存在的特征进行提取,比如,提取其身高,其相貌,其年龄,分析这些特征,从而确定了,这个人就是这个人,我们绝不会认错. 同理,对数据进行分析,也是提取出数据的特征,对其特征进行分析,从而确定这些数据所呈现的信息状况,从而确定了这些数据的独特性和唯一性,因为他呈现的信息是唯一的,绝不与别的是相同的. 那么这些特征是什么呢?拥有哪些特征呢?似乎应该是经过无数科学家的总结,终于发现了几个重要的特征,包括数字特征和分布特征,这个数字特征,包括集中位置,分散