1、R入门

这篇博客介绍了R语言的基础知识,包括基本语法、主要数据结构如向量、矩阵的操作以及逻辑运算。内容涵盖如何启动R的帮助、获取函数信息、向量的创建与运算、逻辑向量的使用、因子化以及矩阵的代数运算。此外,还涉及了向量的下标操作和统计运算,如均值、方差和特征值分解等。
摘要由CSDN通过智能技术生成

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
不积跬步,无以致千里.
你已经很棒啦.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值