“生信星球(微信公众号:生信星球)”的课程学习笔记。
写在前面的tips:
- R代码中的符号均为英文符号。
- 向量由元素组成,元素可以是字符串或者数字。
- 表格在R语言中称为数据框。
- 数据类型
- 向量
- 矩阵
- 数组
- 数据框
- List
1.向量
1. 向量和标量的区别
元素可以是数字也可以是字符串。
变量、标量、向量的关系
2. 赋值语句
>x<-3#赋值3
> x <- c(1,2,3)#赋值向量。c()是常见向量格式。
> x
[1] 1 2 3
> x <- 1:10#赋值1-10连续整数
> x
[1] 1 2 3 4 5 6 7 8 9 10
-
seq()
函数
> x <- seq(1,10,by=0.5)#赋值范围1-10、步长为0.5的数。
> x
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0
[12] 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0
> x <- seq(0,1,length.out = 11)#赋值范围0-1,平分为11个数。
> x
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> x <- seq(1,9,by = 2)#赋值范围1-9,步长为2。
> x
[1] 1 3 5 7 9
> seq(1,9,by=3)#赋值范围1-9,步长为3
[1] 1 4 7
> seq(17)#赋值1-17范围的整数
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
> seq(1:17)#赋值1-17范围的整数
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
-
rep()
函数
> x <- rep(1:3,times=2)#赋值1-3的整数,整体重复两遍
> x
[1] 1 2 3 1 2 3
> rep(1:3,2)#赋值1-3的整数,整体重复两遍
[1] 1 2 3 1 2 3
> rep(1:4,each=2)#赋值1-4的整数,每一个重复两遍
[1] 1 1 2 2 3 3 4 4
> rep(1:4,c(1,2,1,2))#赋值1-4的整数,第1个和第3个重复1遍,第2个和第4个重复2遍
[1] 1 2 2 3 4 4
> rep(1:4,each=2,len=4)#赋值1-4的整数,每一个重复两遍,但只显示前4个数
[1] 1 1 2 2
> rep(1:4,each=2,len=10)#赋值1-4的整数,每一个重复两遍,显示10个数,不够的重新循环
[1] 1 1 2 2 3 3 4 4 1 1
> rep(1:4,each=2,times=3)#赋值1-4的整数,每一个重复两遍,共循环3次
[1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4
想查看变量的赋值,可以看右上角environment。
2. 从向量中提取元素
提取元素都用中括号
- 按元素位置提取
> x #X的值
[1] 1 2 3 1 2 3
> x[4] #提取X中第4个值
[1] 1
> x[-4]#提取除第4个值以外的值
[1] 1 2 3 2 3
> x[2:4] #提取X中第2-4个值
[1] 2 3 1
> x[-(2:4)] #提取除第2-4之外的其他所有值
[1] 1 2 3
> x[c(1,5)]#提取第1个和第5个值
[1] 1 2
- 按元素数值提取
> x[x==2]#提取值为2的元素
[1] 2 2
> x[x<0]#提取小于0的元素
integer(0)
> x[x %in% c(1,2,5)]#提取在c(1,2,5)中存在的元素
[1] 1 2 1 2
2. 数据框
读取数据框
> setwd("/Users/mn/Documents/R/Study")
> setwd("/Users/mn/Documents/R/Study")#到达工作目录,待读取文件存储在这个目录下
> x <- read.csv('doudou.txt')#读取文件
> x
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
- 读取本地数据
read.table
> read.table(file="huahua.txt",sep="\t",header = T)
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> a <- read.table(file="huahua.txt",sep="\t",header = T)
> a
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
sep表示分隔符,txt用sep="\t",csv用sep=","。
header=T/True,说明有标题行;header=F/False,说明没有标题行。
- 设置行名和列名
> read.csv('doudou.txt')
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> colnames(x)#显示所有列名
[1] "X1" "X2"
> rownames(x)#显示所有行名
[1] "1" "2" "3" "4" "5"
> colnames(x)[1]<-("bioplanet")#将第一列的列名改为bioplanet
修改行名
X<-read.csv(file = "huahua.txt",sep = " ",header =T,row.names=1)#最后row.names的意思是修改第一列为行名
使用read.函数时,一定一定要注意文件的分隔符是什么!!!
- 数据框导出
write.table(X,file = "yu.txt",sep = ",",quote=F)#quote=F表示字符串不加引号,quote默认为T,即字符串加引号。
- 变量保存与重新加载
> save(X,file = "test.RData")#保存其中一个变量X,.RData是文件格式
> load("test.RData")#重新加载X变量
> X
X1
A 1
B NA
C NA
D 3
E NA
> save.image(file = "bioplanet.RData")#保存所有变量
> load("bioplanet.RData")#重新加载所有变量
- 提取元素
> X <- read.table(file="huahua.txt",sep="\t",header=T)
> X
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> X[1,1]
[1] "A"
> X[1,1]#提取第1行第1列元素
[1] "A"
> X[,1]#提取第1列元素
[1] "A" "B" "C" "D" "E"
> X[1,]#提取第1行元素
X1 X2
1 A 1
> X[1]#提取第1列元素
X1
1 A
2 B
3 C
4 D
5 E
> X[1:2]
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> X[1:2]#提取第1列到第2列的元素
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> X[c(1,2)]#提取第1列和第2列的元素
X1 X2
1 A 1
2 B NA
3 C NA
4 D 3
5 E NA
> X$X1#提取X1列元素
[1] "A" "B" "C" "D" "E"
> X[1:2,]#提取第1行到第2行的元素
X1 X2
1 A 1
2 B NA
> X[c(1,3),]#提取第1和第3行元素
X1 X2
1 A 1
3 C NA
- 直接使用数据框中的变量
1.直接提取
> a <-data.frame(case=paste(1:50),values=runif(50))
> plot(a$case,a$values)
创建数据框a,a中的case赋予1-50的整数,values赋予50个符合正态分布的随机数。
然后直接用a中的case和value作为x和y绘制散点图。
- 用attach
> attach(a)#将a放入搜索环境中
> plot(case,values)#直接调用a中元素,不需要再加a
> detach(a)#从搜索环境中释放a
当搜索环境中两个变量有相同名称的列名时,会发生冲突。
- 用with
with(a,{
plot(case,values)
x<<-summary(values) #求和并赋值给x,<<的意思是作为全局变量,也就是出了大括号仍有效。
})
问题:
save(X,file="test.RData")这句代码如果报错X not found,是为什么,应该怎么解决?
没遇到这个问题,我猜应该是大小写造成的。