变量
向量Vector
> a=c(1,2,3)
> class(a) #判断向量的类型
[1] "numeric"
一般不需要判断向量的类型,只有在函数不能运行时,判断一下是不是数据类型不复合函数要求
> a=c(1,"a",2)
> class(a)
[1] "character"
创建向量时如果有数字,也有字符,就会全部变成字符
> a=1:10
> a
[1] 1 2 3 4 5 6 7 8 9 10
> a=seq(1:10)
> a
[1] 1 2 3 4 5 6 7 8 9 10
左侧的a是变量,用来存储=右侧的操作;
操作数字"numeric"不用加"";
操作字符串"character"要加""
一般' '与" "无区别, 除非操作对象本身带一个单引号'
矩阵型(Matrix)和数组型(Array)
矩阵Matrix=向量Vector+维度Dim
> a=(1:10)
> a
[1] 1 2 3 4 5 6 7 8 9 10
> dim(a)=c(2,5)
> a
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> class(a)
[1] "matrix" "array"
> pheatmap::pheatmap(a)
> a[2,3] #在a中取元素:第2行,第3列
[1] 6 #数字型6
> a[2,3] <- "6" #给第二行,第三列赋值,赋值为字符
> a
[,1] [,2] [,3] [,4] [,5]
[1,] "1" "3" "5" "7" "9"
[2,] "2" "4" "6" "8" "10"
> pheatmap::pheatmap(a)
Error in cut.default(x, breaks = breaks, include.lowest = T) :
'x' 必需是数值
> class(a)
[1] "matrix" "array"
> str(a)
chr [1:2, 1:5] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
取元素
- 通过下标来取
- 通过逻辑符取
数组是多维的,使用较少,忽略
数据框(Data Frame)
>is. #判断对象类型
>as. #改变对象类型
> a=c(1:10)
> dim(a)=c(2,5)
> a
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> is.matrix(a)
[1] TRUE
> is.array(a)
[1] TRUE
> is.data.frame(a)
[1] FALSE
> b <- as.data.frame(a)
> b
V1 V2 V3 V4 V5
1 1 3 5 7 9
2 2 4 6 8 10
> class(b)
[1] "data.frame"
> str(b)
'data.frame': 2 obs. of 5 variables:
$ V1: int 1 2
$ V2: int 3 4
$ V3: int 5 6
$ V4: int 7 8
$ V5: int 9 10
> pheatmap::pheatmap(b)
> b[2,5] <- "10"
> class(b)
[1] "data.frame"
> str(b)
'data.frame': 2 obs. of 5 variables:
$ V1: int 1 2
$ V2: int 3 4
$ V3: int 5 6
$ V4: int 7 8
$ V5: chr "9" "10"
> pheatmap::pheatmap(b)
Error in cut.default(x, breaks = breaks, include.lowest = T) :
'x' 必需是数值
P2 13:23-15:35 针对线下讲怎么复制代码、提问; 如果是线上的,只对如何梳理代码有点帮助
列表型(List)
d=options()
R可以深度定制,可以自己修改成很多个性化配置
d$repos #选取列表中的元素
e=d$repos #只有在数据框和列表中可以用$
View(e)
取元素
- 通过下标来取
- 通过逻辑符取
> b[,3]
[1] 5 6
> b[,c(T,T,F,F,T)]
V1 V2 V5
1 1 3 9
2 2 4 10
上述代码是指示例作用,真正处理大数据时,应该用Ture or False来取
grep('RNA-seq', a$Assay_Type)
#grep是一个搜索函数,搜索第一个参数RNA-seq,在第二个参数里面搜索a$Assay_Type:a的Assay_Type列;返回RNA-seq的位置
grepl('RNA-seq', a$Assay_Type)
#返回每一个位置(行数)的Ture or False
index1=grep('RNA-seq', a$Assay_Type)
index2=grepl('RNA-seq', a$Assay_Type) #赋值
e=a[index1,]
e=a[index2,]
#两种方法均可以
tmp#小的数据框
list用[]索引之后依然是list,可以理解为子list, 用[[]]才可以索引到元素本身