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

in #r7 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']) # 读取整个第三列


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

相关链接

Sort:  

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

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

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

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

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

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

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

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

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

Coin Marketplace

STEEM 0.24
TRX 0.25
JST 0.039
BTC 96247.25
ETH 3349.36
USDT 1.00
SBD 3.28