欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

R语言中的多维数组、矩阵、列表、数据框

程序员文章站 2022-05-12 19:10:02
在R中,数组(Arrary)可以看做是带多个下标的相同类型的元素集合,常用的是数值型的数组如矩阵,也可以是别的类型的数组,比如字符型,逻辑型等。 Dim属性是数组中很重要的属性,也叫维数向量...

在R中,数组(Arrary)可以看做是带多个下标的相同类型的元素集合,常用的是数值型的数组如矩阵,也可以是别的类型的数组,比如字符型,逻辑型等。

Dim属性是数组中很重要的属性,也叫维数向量,当维数向量有两个值时代表为矩阵,有一个值时代表为一维数组。

#使用向量生成数组或者矩阵
c<-1:12
c
# [1]  1  2  3  4  5  6  7  8  9 10 11 12
dim(c)<-c(3,4)
c
#       [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# [2,]    2    5    8   11
# [3,]    3    6    9   12

dim(c)<-12
c
# [1]  1  2  3  4  5  6  7  8  9 10 11 12
class(c)
# [1] "array"

#使用Arrary来生成数组a   arrary (data,dim=length(data))
a<-array(1:12,dim=c(3,4))
a

#       [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# [2,]    2    5    8   11
# [3,]    3    6    9   12

#使用matrix来构造矩阵(二维数组)matrix(data,nrow=,ncol=,byrow=True)
a<-matrix(1:12,3,4) #构建一个3行4列的矩阵
a

#数组下标的使用
#数组可以通过1、精确指定下标2、以空值代表所有下标, 3、以向量形式指出下标 4、通过数组形式指出下标

a<-1:24
dim(a)<-c(2,3,4)  #定义一个三维数组

a[1,2,3]
# [1] 15
a[,,3]
#       [,1] [,2] [,3]
# [1,]   13   15   17
# [2,]   14   16   18

a[,2:3,1:2]
# , , 1
# 
#       [,1] [,2]
# [1,]    3    5
# [2,]    4    6
# 
# , , 2
# 
#       [,1] [,2]
# [1,]    9   11
# [2,]   10   12

#在不改变数组维度的情况下,将其赋值为0
a[]<-0
a

#也可以用其它数组的值来表示该数组的下标
b<-matrix(c(1,1,1,2,2,3,1,3,4,2,1,4),nrow = 3,ncol = 3)
b
#       [,1] [,2] [,3]
# [1,]    1    2    1
# [2,]    1    2    3
# [3,]    1    3    4

a[b]
# [1]  3 15 23

#同样的我们还可以对其进行赋值运算
a[b]<-0
# a
# , , 1
# 
# [,1] [,2] [,3]
# [1,]    1    0    5
# [2,]    2    4    6
# 
# , , 2
# 
# [,1] [,2] [,3]
# [1,]    7    9   11
# [2,]    8   10   12
# 
# , , 3
# 
# [,1] [,2] [,3]
# [1,]   13    0   17
# [2,]   14   16   18
# 
# , , 4
# 
# [,1] [,2] [,3]
# [1,]   19   21    0
# [2,]   20   22   24

#数组和矩阵的四则运算是对应元素之间的运算,一般是结构相同才能运算
#数组和矩阵运算时,是对矩阵的列运算,不匹配时,一般会有警告

#apply函数 apply(A,margin,fun)
#a代表矩阵,margin=1 代表按行进行fun函数,=2代表按列进行fun函数
a<-1:6
dim(a)<-c(2,3)
a
#       [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
apply(a,1,sum)
# [1]  9 12


#矩阵的运算包含转置、求特征向量、特征根等,笔者用到的不多,以后再总结