R入门
1、基本语法
2、主要数据结构
3、图形功能
4、编程基础
R的基本语法
1、求助
代码 | 作用 |
---|---|
help.start() | 启动R的Web帮助 |
?rnorm/help(rnorm) | 显示"rnorm“函数的帮助 |
apropos(“norm”) | 获得名字中带字符”norm“的所有函数 |
args(rnorm) | 得到rnorm函数的自变量列表 |
2、注意!
R命令提示符 >
R名称和命令大小写敏感!
R命令中不可以使用全角的标点
3、语法
符号 | |
---|---|
> | 命令或运算提示符 |
+ | 续行符 |
基本算术运算 | |
+ | 加 |
— | 减 |
* | 乘 |
/ | 除 |
^ | 乘方 |
赋值符 | |
= | <- |
例子:
#基本运算
3+5
3-5
3/5
3^5
x=5
x
(10+2)*2
n<-(10+2)*5
n
x<-x+x
(x<-x+x)#在式子外面加括号 要求输出结果
((a<-n*x))
逻辑运算:
#逻辑运算,逻辑值:TRUE FALSE#
7==7#相等
7!=6#不等
(7==9)|(7==7)#或
(7==9)&(7==7)#且
向量:R中最为基本的类型
1、 类型
类型 | 备注 |
---|---|
数值型 | 一切实数 |
逻辑型 | TRUE FALSE |
字符型 | “statistic“ (由双引号引起的) |
复值型 | 1i |
一个向量中元素的类型必须相同!
2、查看类型、长度
x<-1
mode(x)#查看对象的类型
length(x)#查看对象的长度,指元素的个数
A<-"statistic"
b<-TRUE
mode(A)
mode(b)
#NA---缺失值(not availabel)
#NaN---表示不是数字的值(not a number)
sqrt(-2)#比如对负数开根号,就会提示NaN
3、向量的建立
c(4,7,17)#向量(序列)没有什么规律
seq(1,10,by=0.5)#=seq(from=1,to=10,by=0.5)具有较为简单的规律
seq(1,10,length=21)#=seq(1,10,length.out=21)
rep(2:5,2)#=rep(2:5,times=2) 具有较为复杂的规律
rep(2:5,c(1,2,3,4))#[2 3 3 4 4 4 5 5 5 5]
rep(1:3,times=4,each=2)#重复四次,每次重复出现两遍
sequence(10)#整数序列【1,2,3,4,5,6,7,8,9,10】
4、运算
数值向量的运算
短向量会顺次循环然后再和长向量进行运算。
5+c(1,2,3,4)
5*c(4,7,17)
c(-1,3,-17)^2
sqrt(c(2,4,25))#开根号
mean(c(2,4,9))#取均值 会把各个元素值相加 求均值
var(c(2,4,9))#取方差
字符向量
(Z<-c("green","blue sky","-99"))
mode(Z)
逻辑向量
x<-c(10.4,5.6,3.1,6.4,21.7)
x>13
(x>13)+1#逻辑向量可以在普通的运算中被使用,逻辑向量只有用来计算时才被当作0和1
#此时被转化为数字向量,FALSE被当作0,TRUE被当作1
5、因子化
#因子(factor)向量 为了后续进行因子分析 主成分分析
#1 将字符向量转换成因子
a<-c("green","blue","green","yellow")
factor(a)
#levels表示因子的水平
#2 将数值型向量转换成因子
b<-c(1,2,3,1)
b<-factor(b)
b
#3 将字符型因子转换成数值型因子
ff<-factor(c("A","B","C"),labels=c(1,2,3))
ff
#4 将数值型因子转换成字符型因子
ff<-factor(c(1,2,3),labels=c("A","B","C"))
ff
#给因子的水平命名
levels(b)<-c("low","middle","high")
b
#产生规则的因子序列
gl(k,n,label,length)#参数依次是:水平数,每个水平重复的次数
#指定每个因子水平的名称(可选),指定产生数据的个数(可选)
gl(3,5)
gl(2,3,label=c("Male","Female"))
gl(2,2,length=10)
6、向量的下标(index)与向量子集(元素)的提取
x<-c(42,7,64,9)
x[1]#提取第一个元素 r中向量的下标从1开始
x[-2]#删除第2个元素
x[c(2,4)]#提取第2和第4个元素
x>10#值大于10的元素逻辑值
x[x>10]#提取值大于10的元素
x[x<40&x>6]
#产生(0,1)上100个服从均匀分布的随机数
y<-runif(100,min=0,max=1)
sum(y<0.5)#值小于0.5的元素的个数
length(y[y<0.5])#值小于0.5的元素的个数
sum(y[y<0.5])#值小于0.5的元素的值的和
sd(y[y<0.5])#值小于0.5的元素构成的样本的标准差
7、重要的数据结构
矩阵
#矩阵的建立
v<-1:6#生成向量
m<-matrix(v,2,3)#按列加载 两行三列
m<-matrix(v,2,3,byrow=T)#按行加载
dim(m)#矩阵的行数和列数
rownames(m)<-c("Male","Female")
colnames(m)<-c("low","middle","high")
dimnames(m)#查看矩阵的行名和列名
x<-diag(3)#生成单位阵
diag(m)#以m的对角元构成的对角阵
diag(v)#将v中的元素作为对角元构成对角阵
#矩阵的下标(index)与子集(元素)的提取 规则:同向量的下标
z<-matrix(1:12,3,4)
z
z[2,4]#z[行,列]
z[1:2,c(2,4)]#z[c(1,2),c(2,4)] 第一行和第二行的第一列和第四列
z[3,]#提取第三行
z[,2]#提取第二列
z[,-c(1,3)]#删除第1,3列所有元素
z[,4]<-NA#将第四列换成缺失值
z[is.na(z)]<-1#将缺失值用1代替
z
#代数运算
#转置t()
x<-matrix(1:6,2,3)
x
t(x)
#几个矩阵合并
y<-matrix(1:4,2,2)
y
cbind(x,y)#按列合并,要求行数相同
z<-matrix(-1:(-6),2,3,by=T)
z
rbind(x,z)#行列合并,要求列数相同
#矩阵相乘
x * z #两同维数矩阵对应元素相乘
x %*% t(z)#两矩阵代数乘积
tcrossprod(x, z)#等价于上面
crossprod(x, z)# = t(x) %*% z
kronecker(x, z)#kronecker 乘积
#矩阵的特征值分解
ev <- eigen(y)
ev #返回值是一个含有 values 和vectors两个分量的列表
ev$values #取出特征值(lambda1,lamda2,…,)
ev$vectors #取出相应的特征向量(v1, v2,…,)
#矩阵的Cholesky分解 A = P’P, 其中P为上三角矩阵
A <- diag(4)+1
P <- chol(A)
P
t(P) %*% P
#矩阵的奇异值分解 A = UDV’, 其中U’U=V’V=I, D是对角阵
A.svd <- svd(A)
#返回值是一个含有 d, u, v 三个分量的列表
A.svd$u %*% diag(A.svd$d) %*% t(A.svd$v)
t(A.svd$u) %*% A.svd$u
t(A.svd$v) %*% A.svd$v
#行列式|A|
det(A)
#矩阵的求逆 Ax=b
b <- -1:2
x <- solve(A, b)
A %*% x
invA <- solve(A)#A的逆矩阵
A %*% invA
#矩阵的拉直
as.vector(A)
#统计运算
#求均值
m<-matrix(rnorm(12),nrow=3)#m[a,b] 生成随机矩阵 随机生成元素为12的
#标准正态分布随机数矩阵 3行
m
apply(m,MARGIN=1,FUN=mean) #求每一行的均值 apply函数 apply(数据,计算的方式(1为按行,2为按列),用什么函数)
apply(m,MARGIN=2,FUN=median)#中位数
#按列中心化,标准化
m.cen<-scale(m,center=T,scale=F)#按列中心化
apply(m.cen,MARGIN=2,FUN=mean)
m.stand<-scale(m,center=T,scale=T)#按列标准化
apply(m.stand,MARGIN=2,FUN=mean)#标准化后的均值
apply(m.stand,MARGIN=2,FUN=sd)#标准差
#减去中位数
row.med<-apply(m,MARGIN=1,FUN=median)
sweep(m,MARGIN=1,STATS=row.med,FUN="-")
未完待续(●’◡’●)
2022.3.20
不积跬步,无以致千里.
你已经很棒啦.