1、创建一个向量(随机向量,一维数组)

  • 函数 c ()创建向量;
  • 函数 length()返回向量长度;
  • 函数 mode()返回向量的数据类型;
x1=c(171,175,152,184,165,172,153,165,182,175,168,169)
 length(x1)
 [1] 12
 mode(x1)
 [1] “numeric”

2、创建一个矩阵(二维数组)

(1)合并命令,可以用rbind()按行合并(row bind),cbind()按例合并(col bind)。

x2=x1=c(171,175,152,184,165,172,153,165,182,175,168,169)
 rbind(x1,x2)
 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
 x1 171 175 152 184 165 172 153 165 182 175 168 169
 x2 171 175 152 184 165 172 153 165 182 175 168 169

(2)生成矩阵用函数matrix()来创建,格式如此下:
matrix(data=NA,nrow= 1,ncol=1,byrow=FALSE,dimnames);
data矩阵必要的元素,nrow行数,ncol例数,byrom是否按行排例元素,dimnames给定行和例的名称

matrix(x1,nrow = 3,ncol = 4)
 [,1] [,2] [,3] [,4]
 [1,] 171 184 153 175
 [2,] 175 165 165 168
 [3,] 152 172 182 169
 matrix(x1,nrow = 4,ncol = 3)
 [,1] [,2] [,3]
 [1,] 171 165 182
 [2,] 175 172 175
 [3,] 152 153 168
 [4,] 184 165 169
 matrix(x1,nrow = 4,ncol = 3,byrow = T)
 [,1] [,2] [,3]
 [1,] 171 175 152
 [2,] 184 165 172
 [3,] 153 165 182
 [4,] 175 168 169

(3)矩阵转置
矩阵A的转置用用函数t()或者transpose(),

A=matrix(1:12,nrow = 3,ncol = 4)
 A
 [,1] [,2] [,3] [,4]
 [1,] 1 4 7 10
 [2,] 2 5 8 11
 [3,] 3 6 9 12
 t(A)
 [,1] [,2] [,3]
 [1,] 1 2 3
 [2,] 4 5 6
 [3,] 7 8 9
 [4,] 10 11 12

(4)矩阵相加减

B=A=matrix(1:12,nrow = 3,ncol = 4)
 A+B
 [,1] [,2] [,3] [,4]
 [1,] 2 8 14 20
 [2,] 4 10 16 22
 [3,] 6 12 18 24
 A-B

相乘用: A%*%B
(6)对角矩阵用函数diag()

A=matrix(1:16,4,4)
 diag(A)
 [1] 1 6 11 16
 diag(diag(A))
 [,1] [,2] [,3] [,4]
 [1,] 1 0 0 0
 [2,] 0 6 0 0
 [3,] 0 0 11 0
 [4,] 0 0 0 16
 diag(3)
 [,1] [,2] [,3]
 [1,] 1 0 0
 [2,] 0 1 0
 [3,] 0 0 1

(7)矩阵求逆,矩阵求逆可用函数solve(),应用solve(a, b)运算结果是解线性方程组ax = b,若b缺省,则系统默认为单位矩阵,因此可用其进行矩阵求逆,

A=matrix(rnorm(16),4,4)
 A
 [,1] [,2] [,3] [,4]
 [1,] -0.49496350 -1.2398513 -0.65320525 0.7356988
 [2,] -0.05733136 -0.0355844 -0.06469889 1.4974569
 [3,] 0.44569392 1.5487172 1.06711290 0.2700429
 [4,] -0.27835210 0.2188533 -1.03581728 0.6141236
 solve(A)
 [,1] [,2] [,3] [,4]
 [1,] -5.8522715 4.1383112 -4.4300990 -1.13188442
 [2,] 0.5955383 -0.7639493 1.0049376 0.70746050
 [3,] 1.6154219 -0.8152687 1.3510231 -0.54137042
 [4,] -0.1401114 0.7728592 -0.0873573 -0.04991394

rnorm(16) #产生16个服从正态分布的随机数
rnorm(100,3,4) #产生100个均值是3,标准差为4的随机数

*dnorm(x, mean = 0, sd = 1, log = FALSE) 的返回值是正态分布概率密度函数值,比如dnorm(z)则表示:标准正态分布密度函数f(x)在x=z处的函数值。
 pnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) 返回值是正态分布的分布函数值,比如pnorm(z)等价于P[X ≤ z]qnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) 的返回值是给定概率p后的下分位点.
rnorm(n, mean = 0, sd = 1) 的返回值是n个正态分布随机数构成的向量。*

(8) 矩阵的特征值与特征向量
矩阵A的谱分解为A=UΛU’,其中Λ是由A的特征值组成的对角矩阵,U的列为A的特征值对应的特征向量,在R中可以用函数eigen()函数得到U和Λ,
eigen (x, symmetric, only.values = FALSE,EISPACK = FALSE)
其中:x为矩阵,symmetric项指定矩阵x是否为对称矩阵,若不指定,系统将自动检测x是否为对称矩阵。

(A=diag(4)+1)
 [,1] [,2] [,3] [,4]
 [1,] 2 1 1 1
 [2,] 1 2 1 1
 [3,] 1 1 2 1
 [4,] 1 1 1 2(A.e=eigen(A,symmetric = T)) #求矩阵的特征值和特征向量
 eigen() decomposition
 $values [1] 5 1 1 1
 $vectors
 [,1] [,2] [,3] [,4]
 [1,] -0.5 0.8660254 0.0000000 0.0000000
 [2,] -0.5 -0.2886751 -0.5773503 -0.5773503
 [3,] -0.5 -0.2886751 -0.2113249 0.7886751
 [4,] -0.5 -0.2886751 0.7886751 -0.2113249

特征向量矩阵U和特征值矩阵与原矩阵A的关系A = UDU‘

A.evalues)%*%t(A.e$vectors)
 [,1] [,2] [,3] [,4]
 [1,] 2 1 1 1
 [2,] 1 2 1 1
 [3,] 1 1 2 1
 [4,] 1 1 1 2
矩阵的维数

在R中很容易得到一个矩阵的维数,函数dim()将返回一个矩阵的维数,nrow()返回行数,ncol()返回列数,例如:

A=matrix(1:12,3,4)
 A
 [,1] [,2] [,3] [,4]
 [1,] 1 4 7 10
 [2,] 2 5 8 11
 [3,] 3 6 9 12nrow(A)
 [1] 3
 ncol(A)
 [1] 4

16 矩阵的行和、列和、行平均与列平均
在R中很容易求得一个矩阵的各行的和、平均数与列的和、平均数,例如:

A
 [,1] [,2] [,3] [,4]
 [1,] 1 4 7 10
 [2,] 2 5 8 11
 [3,] 3 6 9 12rowSums(A)
 [1] 22 26 30
 rowMeans(A)
 [1] 5.5 6.5 7.5
 colSums(A)
 [1] 6 15 24 33
 colMeans(A)
 [1] 2 5 8 11

上述关于矩阵行和列的操作,还可以使用apply()函数实现。

apply (X, MARGIN, FUN, …)

其中:x为矩阵,MARGIN用来指定是对行运算还是对列运算,MARGIN=1表示对行运算,MARGIN=2表示对列运算,FUN用来指定运算函数,。…用来给定FUN中需要的其它的参数,例如:

apply(A,1,sum)
 [1] 22 26 30apply(A,1,mean)
 [1] 5.5 6.5 7.5apply(A,2,sum)
 [1] 6 15 24 33apply(A,2,mean)
 [1] 2 5 8 11

apply()函数功能强大,我们可以对矩阵的行或者列进行其它运算,例如:
计算每一列的方差

A=matrix(rnorm(100),20,5)
 apply(A,2,var) #‘矩阵按例求方差’
 [1] 0.4641787 1.4331070 0.3186012 1.3042711 0.5238485apply(A,2,function(x,a)x*a,a=2) #矩阵按例求函数结果
 [,1] [,2] [,3] [,4]
 [1,] 2 8 14 20
 [2,] 4 10 16 22
 [3,] 6 12 18 24

注意:apply(A,2,function(x,a)xa,a=2)与A2效果相同,此处旨在说明如何应用alpply函数。

总结

x1=c(171,175,159,155,152,158,154,164,168,166,159,164)#创建一个向量
x2=c(57,64,41,38,35,44,41,51,57,49,47,46)
length(x1)#向量的长度
mode(x1)#数据的类型
rbind(x1,x2)#按行合并
cbind(x1,x2)#按列合并
matrix(x1,nrow=3,ncol=4)#利用x1数据创建矩阵
matrix(x1,nrow=4,ncol=3)#创建行数列数发生变化的矩阵
matrix(x1,nrow=4,ncol=3,byrow=T)#创建按照行排列的矩阵
A=matrix(1:12,nrow=3,ncol=4)#创建矩阵
t(A)#求矩阵转置
A=B=matrix(1:12,nrow=3,ncol=4)#创建两个相同的矩阵
A+B#矩阵加法
A-B#矩阵减法
A=matrix(1:12,nrow=3,ncol=4)#创建矩阵
B=matrix(1:12,nrow=4,ncol=3)#创建矩阵
A%*%B#求矩阵的乘积
A=matrix(1:16,nrow=4,ncol=4)#创建行列数相等矩阵
diag(A)#获得矩阵对角线元素
diag(diag(A))#利用对角线元素创建对角矩阵
diag(3)#创建3阶单位矩阵
A=matrix(rnorm(16),4,4)#创建矩阵
A
solve(A)#求矩阵的逆
(A=diag(4)+1) #创建矩阵
A.e=eigen(A,symmetric=T) #求矩阵的特征值与特征向量
A.e$vectors%*%diag(A.e$values)%*%t(A.e$vectors)#特征向量矩阵U和特征值矩阵D与原矩阵A的关系A=UDU'
(A.c=chol(A))#矩阵的Choleskey分解
t(A.c)%*%A.c#Choleskey分解矩阵V与原矩阵A.c的关系A.c=V'V
(A=matrix(1:18,3,6))#创建矩阵
(A.s=svd(A))#矩阵的奇异值分解
A.s$u%*%diag(A.s$d)%*%t(A.s$v)#矩阵的奇异值分解结果与原矩阵A的关系A=UDV'
(A=matrix(1:16,4,4))#创建矩阵
qr(A)#矩阵的QR分解
(A=matrix(1:4,2,2))#创建矩阵
(B=matrix(rep(1,4),2,2))#创建矩阵
kronecker(A,B)#矩阵的kronecker积
A=matrix(1:12,3,4)#创建矩阵
dim(A)#矩阵的维数
nrow(A)#矩阵的行数
ncol(A)#矩阵的列数
rowSums(A)#矩阵按行求和
rowMeans(A)#矩阵按行求均值
colSums(A)#矩阵按列求和
colMeans(A)#矩阵按列求均值
apply(A,1,sum)#矩阵按行求和
apply(A,1,mean)#矩阵按行求均值
apply(A,2,sum)#矩阵按列求和
apply(A,2,mean)#矩阵按列求均值
A=matrix(rnorm(100),20,5)#创建矩阵
apply(A,2,var)#矩阵按列求方差
apply(A,2,function(x,a)x*a,a=2)#矩阵按列求函数结果
(X=data.frame(x1,x2))#产生由X1和X2构建的数据框
(X=data.frame('身高'=x1,'体重'=x2))#赋予数据框新的列标签
(X=read.table("textdata.txt"))#读取名为textdata的txt格式文档
(X=read.table("textdata.txt",header=T))#读取具有列标签的名为textdata的txt格式文档
X=read.csv("textdata.csv")#读取名为textdata的csv格式文档
library(RODBC)#加载RODBC软件包
Rcode<-odbcConnectExcel("Rcode.xls")#读取名为Rcode的Excel工作薄
(data<-sqlFetch(Rcode,"data"))#显示Rcode中名为data表单的数据
(codedata <- sqlFetch(Rcode,"codedata"))#显示Rcode中名为codata表单的数据
hist(x1) #做出身高的直方图
plot(x1,x2) #做出身高和体重的散点图
data=read.table("clipboard",header=T) #将剪切板数据读入数据框data中
head(data)#显示前6组数据
attach(data)#绑定数据
table(年龄)#一维列联表
barplot(table(年龄),col=1:7)#条形图
pie(table(结果))#饼图
table(年龄,性别) #二维列联表
barplot(table(年龄,性别),beside=T,col=1:7)#以性别分组的年龄条图
barplot(table(性别,年龄),beside=T,col=1:2)#以年龄分组的性别条图
ftable(年龄,性别,结果) #以年龄、性别排列的结果频数三维列联表
ftable(性别,年龄,结果)#以性别、年龄排列的结果频数三维列联表
(ft=ftable(性别,结果,年龄))#显示以性别、结果排列的年龄频数三维列联表
rowSums(ft)#求行和
colSums(ft)#求列和
sum(ft)#求总和