R语言-基础

2023-05-05 22:32:35 浏览数 (1)

一. R的使用

  1. 在Rstudioy中新建项目(R project) File-New Project-New Directory-New Project-Directory name-Creat Project (文件中不要有中文和字符)
  2. 新建脚本 (Ctr shift N)
  3. 更改字号 (Tools-Global options-Apearance-Editor font size)
  4. 重启 session-restart R (Ctr shift F10)
  5. 工作目录(working directory)默认在 .Rproject文件夹下
  6. 打开文件时,双击打开 .Rproject 即可打开RStudio,打开后工作目录自动设置好了
  7. R界面文字放大 “control” “shift” “ ” R界面文字缩小 “control” “-”

二.报错

  1. 报错: Error 。 解决:检查命令,检查环境,修正后重新运行
  2. 结果出错时(Error),只看最后一个冒号的后半句
  3. 解决报错信息的两大思路,1. 检查代码有没有问题,2. 看报错信息关键词
  4. 错误(Error) Error:后出现unexpected...代表代码写错啦!
  5. 错误(Error) could not found function... 代表函数写错了或者还没有加载这个函数,function就是函数
  6. 错误(Error) object..not found 没有对象,代表函数写错了(忘加" "等 ) 错误(Error): no such file or directory #可能是工作目录不对,找不到这个文件
  7. Tab键自动补齐代码
  8. 上下键可翻动,在控制台上,光标放在 > 后面,按上键,即可修改上一条命令重新运行

操作中的常见错误

代码语言: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

  1. Warning 忽略,后面有报错或意外结果在检查
  2. > 代表已经运行运行完成
  3. 太长时间卡住不动,中止(红色键)或重启 (三个等级的重启: 重启session ,重启RStudio , 重启电脑)
  4. 出 “ ” , 代表命令不完整,补全或ESC退出
  5. a/s/n :图省事回答n, (但被问问题了,不能不理)

三.数据类型与数据结构

查看字符型、逻辑型和数值型向量的方式

代码语言:javascript复制
class("a")
class(TRUE)
class(3)

比较运算的结果是逻辑值

  • , <, <=, >=, ==, != 比较运算 多个逻辑条件的连接与&、或|、非! !(4>5)
代码语言:javascript复制
!(4>5)   #!的作用:是变否、否变是
[1] TRUE
  1. 数据类型 数值型(numeric),字符型(character),逻辑型(logical)#is.
  2. 数据结构(向量、数据框、矩阵、列表)
  3. 字符型向量必须加引号(单双皆可)不能为中文值
  4. 逻辑型(logical)包括TRUE(T)、FALSE(F)、 NA(缺失值)
  5. 判断数据类型的函数class()
  6. 数据框单独拿出来一列是向量,视为一个整体,一列只能有一种类型。
  7. 一个向量只能有一种数据类型,可以有重复值。
代码语言:txt复制
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组成的向量

  1. 修改向量中的某个或某些元素
代码语言:javascript复制
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),

0 人点赞