一. R的使用
- 在Rstudioy中新建项目(R project) File-New Project-New Directory-New Project-Directory name-Creat Project (文件中不要有中文和字符)
- 新建脚本 (Ctr shift N)
- 更改字号 (Tools-Global options-Apearance-Editor font size)
- 重启 session-restart R (Ctr shift F10)
- 工作目录(working directory)默认在 .Rproject文件夹下
- 打开文件时,双击打开 .Rproject 即可打开RStudio,打开后工作目录自动设置好了
- R界面文字放大 “control” “shift” “ ” R界面文字缩小 “control” “-”
二.报错
- 报错: Error 。 解决:检查命令,检查环境,修正后重新运行
- 结果出错时(Error),只看最后一个冒号的后半句
- 解决报错信息的两大思路,1. 检查代码有没有问题,2. 看报错信息关键词
- 错误(Error) Error:后出现unexpected...代表代码写错啦!
- 错误(Error) could not found function... 代表函数写错了或者还没有加载这个函数,function就是函数
- 错误(Error) object..not found 没有对象,代表函数写错了(忘加" "等 ) 错误(Error): no such file or directory #可能是工作目录不对,找不到这个文件
- Tab键自动补齐代码
- 上下键可翻动,在控制台上,光标放在 > 后面,按上键,即可修改上一条命令重新运行
操作中的常见错误
代码语言:javascript复制class(a) # 字符型加" "
Error: object 'a' not found
> calss("a") # class写错了
Error in calss("a") : could not find function "calss"
> class(true) # true写大写
Error: object 'true' not found
> class(TURE) # TURE写错了
Error: object 'TURE' not found
> class(TRUE)# 括号是中文的,是错误的!
Error: unexpected input in "class("
note
- Warning 忽略,后面有报错或意外结果在检查
- > 代表已经运行运行完成
- 太长时间卡住不动,中止(红色键)或重启 (三个等级的重启: 重启session ,重启RStudio , 重启电脑)
- 出 “ ” , 代表命令不完整,补全或ESC退出
- a/s/n :图省事回答n, (但被问问题了,不能不理)
三.数据类型与数据结构
查看字符型、逻辑型和数值型向量的方式
代码语言:javascript复制class("a")
class(TRUE)
class(3)
比较运算的结果是逻辑值
- , <, <=, >=, ==, != 比较运算 多个逻辑条件的连接与&、或|、非! !(4>5)
!(4>5) #!的作用:是变否、否变是
[1] TRUE
- 数据类型 数值型(numeric),字符型(character),逻辑型(logical)#is.
- 数据结构(向量、数据框、矩阵、列表)
- 字符型向量必须加引号(单双皆可)不能为中文值
- 逻辑型(logical)包括TRUE(T)、FALSE(F)、 NA(缺失值)
- 判断数据类型的函数class()
- 数据框单独拿出来一列是向量,视为一个整体,一列只能有一种类型。
- 一个向量只能有一种数据类型,可以有重复值。
is.numeric('4') #是否数值型数据
is.logical(F) #是否逻辑型数据
is.character('4') #是否字符型数据
#.as
代码语言:txt复制as.numeric("4") #转换为数值型数据
as.logical() #转换为逻辑型数据
as.character() #转换为字符型数据
3.1向量
3.1.1向量的生成
(1)用c( ) 逐一放到一起
代码语言:txt复制c(1,2,3)
(2)连续的数字用" :"
代码语言:txt复制1:5
(3)有重复的用rep(),有规律的用seq(),随机数用rnorm()
代码语言:txt复制rep("handsome",times = 3)
seq(from = 1,to = 100 ,by = 2)
rnorm(n = 5) #符合正态分布的随机数
(4)通过组合产生更为复杂的向量
代码语言:txt复制paste0(rep("gene",times = 4),1:4) #无空格连接
赋值 输出一齐实现的方法
代码语言:txt复制(x <- c(seq(1,10,2))) # 法一
1 1 3 5 7 9
x <- c(seq(1,10,2));x # 法二
1 1 3 5 7 9
初级统计函数 max() ,min() , mean() , median() ,var()方差 , sd()标准差 , sum()总和, length(x) # 长度(x中元素的个数), unique(x) #去重复(第一次出现不为重复,第二次出现为重复),duplicated(x)#检查重复值 , table(x) 重复值(因子)统计 ,sort(x) #排序 , dim() 查看行列数, nrow()查看行数,ncol() 查看列数
代码语言:txt复制x <- c(1,3,5,1)
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
sort(x,decreasing = T) #从大到小
1 5 3 1 1
dim(iris)
ncol(iris)
两个向量(长度一致)的操作
代码语言:txt复制x <- c(1,3,5,1)
y <- c(3,2,5,6)
x==y #比较运算
1 FALSE FALSE TRUE FALSE
x*y #计算
1 3 6 25 6
paste(x,y,sep = "/")
1 "1/3" "3/2" "5/5" "1/6"
两个向量(长度不一致)的操作
代码语言:txt复制x <- c(1,3,5,1,6)
y <- c(3,2,5)
x==y #长度不一致,发生循环补齐
Warning: longer object length is not a multiple of shorter object length
1 FALSE FALSE TRUE FALSE FALSE
paste0(rep("student",time = 7),seq(from = 2,to = 15,by = 2)
paste0("student",seq(2,15,2)) #循环补齐简化代码
1 "student2" "student4" "student6" "student8"
5 "student10" "student12" "student14"
交集,并集,差集 ,%in%
代码语言:txt复制x <- c(1,3,5,1,6)
y <- c(3,2,5)
intersect(x,y)
union(x,y)
setdiff(x,y)
setdiff(y,x)
x %in% y #中的元素在y中存在吗(逻辑值)
PDF文件保存的1种方式
代码语言:javascript复制pdf("x.pdf") #空壳
plot(x1$len,col = factor(x1$dose)) #画图
title("Have a try")
dev.off() #关掉图片编辑器,在文件中保存图片
3.1.2向量取子集
1.逻辑值取子集 xx > 4
里是与x等长且一一对应的逻辑值向量
2.下标/位置取子集 x4 , x-4
里是由x组成的向量
- 修改向量中的某个或某些元素
x<-c(8:15)
[1] 8 9 10 11 12 13 14 15
x[4] <- 20 ;x
[1] 8 9 10 20 12 13 14 15
x[c(5:6)] <- 3;x
[1] 8 9 10 20 3 3 14 15
画图
代码语言:javascript复制k1 <- rnorm(12);k1
plot(k1) # index(位置下标)作为x, x值作为y~~删除线~~
k2 <- rep(1:6,each = 2);k2
boxplot(k1~k2) # k1作为x, k2作为y
取交集会去重复,而%in%取子集不会
赋值符号(<-) 和小于 符号,遇见要注意负号前加空格,才能区分
运行顺序
代码语言:text复制x <- rnorm(10)
sort(x[x<0]) #运行顺序:有嵌套的先里后外,无嵌套的从左到右
sort(x)[x<0] #与下面的相同
#y <- sort(x)
#y[x<0]
(1:10)[c(T,F)] #循环补齐 T,F
3.2 数据结构
用class() 或is()族函数进行判断数据结构
新建数据框
data.frame(colname=data)
Error:no such file or dirextory #可能是工作目录不对,找不到这个文件
data.frame取子集1. $ df$csore 2.按坐标[] df 2,2 ,3. 按名字 df,c("gene",change") 4. 按条件 df$scoredf$score > 0, 数据框按照逻辑取子集,TURE对应的行/列留下,FALSE对应的行/列丢掉。
代码语言:text复制df1 <- data.frame(gene = paste0("gene",1:4),
change = rep(c("up","down"),each = 2),
score = c(5,3,-2,-4))
df1
df1$gene[df1$score!=5]#取gene的方式,类似于向量取子集
df1[,length(df1)] #获取最后一列数据
df1[,-length(df1)] #删除最后一列数据
数据框修改
代码语言:text复制df1[3,3] <- 5 #改一个格
df1[3,] <- c(3,3,3,3) #改一列
df1$p.value <- c(0.1,0.1,0.1,0.1) #添加一列
df1
row.names<- c(1,2,3,4) #修改行名
代码语言:text复制两个数据框的连接
merge(x, y, by = intersect(names(x), names(y)),
by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,
incomparables = NULL, ...)
矩阵的新建和取子集
矩阵不支持$
代码语言:text复制 matrix(1:9,nrow = 3)
t(matrix(1:9,nrow = 3))#转置
as.data.frame(matrix(1:9,nrow = 3)) #转换为数据框
class(matrix(1:9,nrow = 3))
[1] "matrix" "array" # "array"是特殊的数组,不用看这个
热图
代码语言:text复制m <- matrix(1:9,nrow = 3)
pheatmap::pheatmap(m) #默认聚类
pheatmap::pheatmap(m,cluster_cols = F,cluster_rows = F)#不聚类
列表新建与取子集
代码语言:text复制L <- list(m1 = matrix(1:9,nrow = 3),
m2 = matrix(2:10,nrow = 3))
L$m2 #列表取子集
L[[2]] 与上同
元素的“名字”-names()
代码语言:text复制score <- c(50,20,40,55,60)
names(score) <- c("a","w","q","f","g")
names(score)[score>54] #向量取子集
删除
rm()
rm(list=ls())
ctrl L #清空控制台
调整顺序的方式 ac(1,3,2),