初识R语言——R语言基础1
R
安装4.3版本
R version 4.3.1
R Studio
新建R project,命名并选择路径。管理工作目录。
新建脚本,书写命令。
重启R语言,Session——restart R.
查询函数的功能:?sqrt()
运行代码:ctrl enter
脚本注释:#
数据类型和向量
数据类型:数值型、字符型、逻辑型。
代码语言:txt复制== #判断两个数据相等吗
!= #判断两个数据不相等吗
class()##判断数据类型
逻辑条件 与&,或|,非!
is族函数,判断数据类型
代码语言:txt复制is.numeric()
is.logical()
is.character()
as族函数转化数据类型
代码语言:txt复制as.numeric()
as.logical()
as.character()
##能转换的才能转换
数据结构:
向量、数据框、矩阵、列表
生成向量
代码语言:txt复制c()
: ##连续的数字
rep(),seq(),rnorm()
paste0()
Q1:汉字乱码怎么办?
对单个向量进行操作
1,赋值
代码语言:txt复制x<-c(1,3,5)
x=c(1,3,5)
(x<-c(1,3,5)) #赋值 输出一起实现
x<-c(1,3,5);x #赋值 输出一起实现
2,简单数学计算
代码语言:txt复制x 1
log(x)
sqrt(x)
3,根据条件进行判断,生成逻辑值向量
代码语言:txt复制x>3
x==3
4,初级统计
代码语言:txt复制max(x)
min(x)
mean(x)
median(x)
var(x) #方差
sd(x) #标准差
sum(x) #总和
length(x) #长度
unique(x) #去重复
duplicated(x) #判断重复,对应元素在改集合中是否重复出现,第一次出现不算重复
!duplicated(x) #判断重复
table(x)#元素重复次数统计
sort(x)#从小到大排序
?sort()
sort(x, decreasing=F)
sort(x, decreasing=T)
对两个向量进行操作
1,比较运算,生成等长的逻辑运算
代码语言:txt复制x=c(1,3,5,1)
y=c(3,2,5,6)
x==y
y==x
###
> x=c(1,3,5,1)
> y=c(3,2)
> x==y
[1] FALSE FALSE FALSE FALSE
###循环补齐
利用循环补齐简化代码
代码语言:txt复制paste0(rep("x",3),1:3)
paste0("x",1:3)
2,数学计算
代码语言:txt复制x y
3,连接
代码语言:txt复制paste(x,y,sep=",")
paste与paste0的区别
代码语言:txt复制> paste(x,y,sep=",")
[1] "1,3" "3,2" "5,5" "1,6"
> paste0(x,y)
[1] "13" "32" "55" "16"
> paste(x,y)
[1] "1 3" "3 2" "5 5" "1 6"
4,交集、并集、差集
代码语言:txt复制x=c(1,3,5,1)
y=c(3,2,5,6)
> intersect(x,y) ##交集
[1] 3 5
> union(x,y) ####并集
[1] 1 3 5 2 6
> setdiff(x,y) ###x与y的补集
[1] 1
> setdiff(y,x) ###y与x的补集
[1] 2 6
#重点
%in%
> x%in%y #x的每个元素在y中存在吗
[1] FALSE TRUE TRUE FALSE
> y%in%x #y的每个元素在x中存在吗
[1] TRUE FALSE TRUE FALSE
x<12
#x[x<12]#从x里面选择大于12的值输出
向量筛选,取子集[]
x[4]
x[2:4]
x[c(1,5)]
x[-4]
x[-c(2:4)]
Tips数据类型转换的优先顺序
如何修改向量中的某个、某些元素
代码语言:txt复制> x<-c(8,9,23,5)
> x
[1] 8 9 23 5
> x[4]<-6 ###修改一个元素
> x
[1] 8 9 23 6
> x[c(1,2)]<-c(2,5)
> x
[1] 2 5 23 6
R语言的修改需要赋值,没有赋值就没有发生修改!
简单向量画图
代码语言:txt复制> k1=rnorm(12);k1
[1] 0.3984753 0.1087545 0.6005117 -0.3122944 0.1458446
[6] -1.4176147 0.7168302 0.6837698 1.1993463 1.2120804
[11] -0.2369449 0.4813943
> plot(k1)
###
> ?rep()
> k2=rep(c("a","b","c","d"),each=3);k2
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d"
> k2=rep(c("a","b","c","d"),times=3);k2
[1] "a" "b" "c" "d" "a" "b" "c" "d" "a" "b" "c" "d"
boxplot(k1~k2)##k1纵坐标;k2横坐标
练习题:
代码语言:txt复制# 1.生成1到15之间所有偶数
seq(from=2,to=15,by=2)
# 2.生成向量,内容为:"student2" "student4" "student6" "student8" "student10" "student12"
# "student14"
# 提示:paste0
paste0(rep("student",times=length(seq(from=2,to=15,by=2))),seq(from=2,to=15,by=2))
paste0(rep("student",times=7),seq(from=2,to=15,by=2))
paste0("student",seq(from=2,to=15,by=2))
# 3.将两种不同类型的数据用c()组合在一起,看输出结果
c(1,"a")
c("a",1)
c(TRUE,"a")
c(TRUE, FALSE, 4)
# 说明:运行load("gands.Rdata"),即可得到和使用我准备的向量g和s,
# 如有报错,说明你的代码写错或project没有正确打开
load("gands.Rdata")
# 4.用函数计算向量g的长度
length(g)
# 5.筛选出向量g中下标为偶数的基因名。
a=seq(from=2,to=100,by=2)
g[a]
###
seq(2,100,2);g[seq(2,100,2)]
# 6.向量g中有多少个元素在向量s中存在(要求用函数计算出具体个数)?将这些元素筛选出来
# 提示:%in%
g%in%s
table(g%in%s)
###
g[g%in%s]
###取交集会去重复,而%in%取子集不会去重复值!
# 7.生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
a=rnorm(n=10,mean=0,sd=18)
a[a< -2]
a[a<(-2)]
# 8.x = 1:10 ;y = c(3:5,11,24)#从全集里面去掉交集
z=union(x,y)
z
r=intersect(x,y)
setdiff(z,r)
###或者
setdiff(union(x,y),intersect(x,y))
x<12
x[x<12]#从x里面选择大于12的值输出