继续学R:Matrices(矩阵) Part 1,创建矩阵&命名&访问

in r •  7 years ago  (edited)

在之前的文章中我们学习了R的列表,包括创建列表&命名&访问以及列表的操作,哎,有点想放弃了,我为啥要凑热闹学R呢?就是为了一时好奇😔?啥时候烂尾千万不要意外啊。

这节我们来了解一下R的Matrices(矩阵) 。我理解的矩阵有点像其它语言中的二维数组,里边只能存相同类型的元素。让我们来实际操作见识一下吧。

创建 Matrices(矩阵)

语法

创建矩阵的语法如下:

matrix(data, nrow, ncol, byrow, dimnames)

其中

  • data:作为矩阵数据的向量
  • nrow:指定行数
  • ncol:指定列数
  • byrow:向量元素是否按行排列
  • dimnames:分配给行列的名称

示例

来试一下创建矩阵

m<-matrix(c(1:12), nrow=3, byrow=TRUE)
print(m)


上述代码为我们创建了一个三行四列的矩阵,元素按行排列

创建并命名行列

关于dimnames,这个是给矩阵的行列命名,它必须是一个列表,包含向量组成的行名称以及列名称。列名称可以省略(只命名行),只命名列时行需要指定为NULL。行名称以及列名称的向量数必须和行列数一致。

例如:

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('a', 'b', 'c')))
print(m)
m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(NULL, c('a', 'b', 'c', 'd')))
print(m)
m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('a', 'b', 'c'), c('1', '2', '3', '4')))
print(m)

访问矩阵的元素

通过下标访问

不同于其它语言中的二维数组可以用a[i][j]的方式访问矩阵中的元素只可以用诸如a[i, j]的方式访问。

以上边我们生成的矩阵为例,欲访问第二行第三个元素,我们需要使用如下代码:

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('a', 'b', 'c'), c('1', '2', '3', '4')))
print(m)
print(m[2, 3])

另外我们可以通过只传入行或者列来读取一整行或者一整列数据,比如说:

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('r1', 'r2', 'r3'), c('c1', 'c2', 'c3', 'c4')))
print(m)

print(m[2, ]) # 读取整个第二行
print(m[, 3]) # 读取整个第三列

按命名访问

R - Matrices一文中并未涉及按命名访问,不过我想既然都给起名了,不能按命名访问,岂不是说过不去?

m<-matrix(c(1:12), nrow=3, byrow=TRUE, dimnames=list(c('r1', 'r2', 'r3'), c('c1', 'c2', 'c3', 'c4')))
print(m)
print(m['r3', 'c2' ]) # 读取第三行第二个元素
print(m['r2', ]) # 读取整个第二行
print(m[, 'c3']) # 读取整个第三列


好了,今天就到这吧,下节继续。

相关链接

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

看到Matrices我整个就怕了。这个学期有学Linear Algebra,说白了就是一大堆Matrices混合在一起的黑魔法…

原来这个东西可以这么抽象这么强大啊。

我其实没看过R这个语言,乍看之下似乎是专用来写数据处理的?

其实我也不知道它是干啥的,稀里糊涂就学上了呢

其实 @oflyhigh 应该是很多人学习的榜样,保持好奇心,坚持学习。这对大多数人来说都已经做不到了。

哈哈,马上就要烂尾啦,学不动啦。

教程中的两个矩阵运算只是对应元素相加减乘除,不符合矩阵的运算规则,好像也说不过去。

哇咔咔,我的数学没学好😳

其实 @oflyhigh 应该是很多人学习的榜样,保持好奇心,坚持学习。这对大多数人来说都已经做不到了。