1.R与Rstudio####
生信第一步,穿上打底裤。
打底裤品牌可以‘R语言’,也可是‘python’。
不过大多数人穿的都是R语言牌。建议你也先穿这个牌子。穿破了以后可以再换新的。
打底裤穿好,再穿个裤子。裤子品牌建议选Rstudio
一般人不会穿着打底裤就出来上街的。
1.1安装R
https://cloud.r-project.org
1.2安装Rstudio
http://www.rstudio.com/download
最好默认C盘安装,否则容易出错,今天不出错,明天也可能出错。
2.R语言第一种数据类型---向量
2.1.向量生成#####
(1)用 c() 结合到一起
> c(2,5,6,2,9)
[1] 2 5 6 2 9
> c("a","f","md","b")
[1] "a" "f" "md" "b"
(2)连续的数字用冒号“:”
> 1:5
[1] 1 2 3 4 5
(3)有重复的用rep(),有规律的序列用seq(),随机数用rnorm
rep("gene",times=3)
[1] "gene" "gene" "gene"
seq(from=3,to=21,by=3)
[1] 3 6 9 12 15 18 21
rnorm(n=3)
[1] 0.07456498 -1.98935170 0.61982575
set.seed(1)#保证别人再次重新运行脚本的时候可重复 而不是保证上下两行是重复
rnorm(5)
[1] -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078
rnorm(5)
[1] -0.8204684 0.4874291 0.7383247 0.5757814 -0.3053884
(4)通过组合,产生更为复杂的向量。
paste0(rep("gene",times=3),1:3)
[1] "gene1" "gene2" "gene3"
2.2对单个向量进行的操作####
> #(1)赋值给一个变量名
> x = c(1,3,5,1) #随意的写法=
> x
[1] 1 3 5 1
> x <- c(1,3,5,1) #规范的赋值符号Alt+减号
> x
[1] 1 3 5 1
>
> #赋值+输出一起实现
> x <- c(1,3,5,1);x
[1] 1 3 5 1
> (x <- c(1,3,5,1))
[1] 1 3 5 1
(2)简单数学计算 向量循环 类似循环
> x+1
[1] 2 4 6 2
> log(x)
[1] 0.000000 1.098612 1.609438 0.000000
> sqrt(x)
[1] 1.000000 1.732051 2.236068 1.000000
(3)根据某条件进行判断,生成逻辑型向量
x>3
[1] FALSE FALSE TRUE FALSE
> x==3
[1] FALSE TRUE FALSE FALSE
> #(4)初级统计
> max(x) #最大值
[1] 5
> min(x) #最小值
[1] 1
> mean(x) #均值
[1] 2.5
> median(x) #中位数
[1] 2
> var(x) #方差
[1] 3.666667
> sd(x) #标准差
[1] 1.914854
> sum(x) #总和
[1] 10
>
> length(x) #长度
[1] 4
> unique(x) #去重复
[1] 1 3 5
> duplicated(x) #对应元素是否重复
[1] FALSE FALSE FALSE TRUE
> table(x) #重复值统计
x
1 3 5
2 1 1
> sort(x)
[1] 1 1 3 5
2.3.对两个向量进行的操作#####
> x = c(1,3,5,1)
> y = c(3,2,5,6)
> #(1)逻辑比较,生成等长的逻辑向量
> x == y
[1] FALSE FALSE TRUE FALSE
> x %in% y #x中的元素在y中吗
[1] FALSE TRUE TRUE FALSE
> #(2)数学计算
> x + y
[1] 4 5 10 7
> #(3)“连接“
> paste(x,y,sep=":")
[1] "1:3" "3:2" "5:5" "1:6"
> paste(x,y,sep='')
[1] "13" "32" "55" "16"
> paste(x,y)#默认是空格
[1] "1 3" "3 2" "5 5" "1 6"
> #(4)交集、并集、差集
> intersect(x,y)
[1] 3 5
> union(x,y)
[1] 1 3 5 2 6
> setdiff(x,y)#前有后没有的
[1] 1
> setdiff(y,x)#前有后没有的
[1] 2 6
> #当两个向量长度不一致
> x = c(1,3,5,6,2)
> y = c(3,2,5)
> x == y # 啊!warning啦!
[1] FALSE FALSE TRUE FALSE TRUE
Warning message:
In x == y : longer object length is not a multiple of shorter object length
> #循环补齐--看ppt 用短的补齐长的 得到长的数值
>
> #利用循环补齐简化代码
> paste0(rep("gene",3),1:3)#paste0 = paste(x,y,sep='')
[1] "gene1" "gene2" "gene3"
> paste0("gene",1:3)
[1] "gene1" "gene2" "gene3"
2.4.向量筛选(取子集)--看ppt#####
> x <- 8:12
> #根据逻辑值取子集
> x[x==10]#== 是否等于
[1] 10
> x[x<12]
[1] 8 9 10 11
> x[x %in% c(9,13)]
[1] 9
> #根据位置取子集
> x[4]
[1] 11
> x[2:4]
[1] 9 10 11
> x[c(1,5)]
[1] 8 12
> x[-4]#反选
[1] 8 9 10 12
> x[-(2:4)]#反选
[1] 8 12
2.5.修改向量中的某个/某些元素:取子集+重新赋值
> x[4] <- 40
> x
[1] 8 9 10 40 12
#主动写才会出来x[x>10] <- 10
> x
[1] 8 9 10 40 12
2.6 简单向量作图
> k1 = rnorm(12);k1
[1] 1.51178117 0.38984324 -0.62124058 -2.21469989 1.12493092 -0.04493361
[7] -0.01619026 0.94383621 0.82122120 0.59390132 0.91897737 0.78213630
> k2 = rep(c("a","b","c","d"),each = 3);k2
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d"
> plot(k1)
> boxplot(k1~k2) #试着搜索boxplot表达什么意思
难点--向量匹配排序:match
> x <- c("A","B","C","D","E")
> y <- c("B","D","E","A","C")
> match(x,y)
[1] 4 1 5 2 3
> #生成一个向量#[1] 4 1 5 2 3
>
> y[match(x,y)] #根据x,调整y的顺序
[1] "A" "B" "C" "D" "E"
> #前面是模板或者标尺[1] "A" "B" "C" "D" "E"
> x[match(y,x)] #根据y,调整x的顺序
[1] "B" "D" "E" "A" "C"
> #[1] "B" "D" "E" "A" "C"