R语言基础知识-学习笔记汇总

B站课程:生信必备技巧之R语言基础教程全集的代码笔记

1.R语言包安装

rm(list = ls())
# 设置镜像:
options()$repos
options()$BioC_mirror
#options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
options(BioC_mirror="http://mirrors.tuna.tsinghua.edu.cn/bioconductor/")
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options()$repos
options()$BioC_mirror

# 方法一:
options()$repos
install.packages('WGCNA')
install.packages(c("FactoMineR", "factoextra"))
install.packages(c("ggplot2", "pheatmap","ggpubr"))
library("FactoMineR")
library("factoextra")

# 方法二:
if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("KEGG.db",ask = F,update = F)
BiocManager::install(c("GSEABase","GSVA","clusterProfiler" ),ask = F,update = F)
BiocManager::install(c("GEOquery","limma","impute" ),ask = F,update = F)
BiocManager::install(c("org.Hs.eg.db","hgu133plus2.db" ),ask = F,update = F)

# 方法三:从github中安装

# 所有的R包都提交上传到CRAN,如Github,需要通过一定的渠道进行安装
# R安装devtools包
install.packages("devtools")
library(devtools)
# 安装github上的R包(需或改hosts)
devtools::install_github('lchiffon/REmap')
# 前为github的用户名,后为包名

# 测试--加载R包;
library(GSEABase)
library(GSVA)
library(ggplot2)
library(ggpubr)
library(pheatmap)

library(REmap)
library(org.Hs.eg.db)
library(limma)
library(hgu133plus2.db)
library(clusterProfiler)

if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("clusterProfiler")

2.向量

a = 1
b <- TRUE
d = "abc"

class(a)
class(b)
class(d)
a <- c(1,2,5,3,6,-2,4)
b <- c("one", "two", "three")
d <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)

a <- c(1:10)
b <- seq(1,10,2)
x <- 3
value1 <- 4
d <- rep(x,times = value1)

a <- c(1,2,3,4,5,6,7)

a[3]
a[c(1,3,4)]
a[2:6]
a[c(1,2)] <- c(11,22)
#删除第一个元素(加负号)
a[-1]
a[-2]
a[1]

a <- paste("a","b","c",1:3,sep = '')
a

b <- paste("a","b","c",2:4,sep = '+')
b

c <- paste("a","b","c",1:3,sep = '+',collapse = '----')
c


sum(1:100)

# 取向量中最小最大的值:
min(x)
max(x)

# 求的是取得最小(大)值的第几个分量
which.min(x)
which.max(x)
sum(x)  # 求和
median(x)   # 求中位数
prod()  # 求积
var()  # 方差、
mean() # 平均值等
sort() # 给x排序,默认递增
rev() # 倒序
order() # 给出递增的序列号
a[order(a)]

3.逻辑运算

#NA代表缺失,NULL代表数据不存在
#NA,占位符,意味着这里没有一个值,但是位置存在
length(c(NA,NA,NULL))
c(NA,NA,NULL,NA)

#比较大小
c(1,2,3,4)>2
a = c(1,2,3)
b = a >2

#从一个线性表中筛选出大于等于60且小于70的数据
vector = c(10,40,78,64,53,66,70)
vector2 = vector[vector>=60&vector<70]

#与或非
vector[vector>=60 | vector<30]
vector[!vector>60]

#删除所有变量
rm(list = ls())

4.字符串操作

#大小写转换
toupper('Run') #大写
tolower('Run') #小写


# 统计字符串长度
nchar("中文",type = "bytes")  # 统计字节长度
nchar("中文",type = "char")  # 统计字符数量

#截取字符串
substr("12345678",1,5) #截取字符串,从1到5
substring("12345678",5) #截取字符串,从5开始一直到结束

#将字符串转换为数字
a = "123"
num = as.numeric(a)
num = as.numeric("12")

# 将数字转换为字符串
as.character(12.33)

#分割符拆分字符串
a = strsplit("2022;6;1",";")
a

# 替换字符串
gsub("/","-","2022/6/1")

#正则表达式
gsub("[[:alpha:]]+","$","abc one tow three") #字母
gsub("[[:alnum:]]+","$","12 23 33") #数字

5.矩阵

5.1 矩阵创建

#创建矩阵
matrix(data = NA,nrow = 1,ncol = 1,byrow=FALSE,dimnames = NULL)
# data 向量,矩阵的数据; nrow行数;ncol列数;
# byrow 逻辑值,为FALSE按列排列,为TRUE按行排列;dimname设置行和列的名称;

#byrow = TRUE 
# 1 2 3 4
# 5 6 7 8

#byrow = FALSE
# 1 3 5 7
# 2 4 6 8

y <- matrix(1:20,nrow = 5, ncol = 4, byrow = TRUE)
y

y <- matrix(1:20,nrow = 5, ncol = 4) #默认byrow = FALSE
y

# 指定行名和列名
cells <- c(1,26,24,68)
ranmes <- c("R1","R2")
cnames <- c("C1","C2")
mymatrix <- matrix(cells,nrow=2,ncol=2,byrow = TRUE,dimnames = list(rnames,cnames))

#byrow为TRUE元素按行排列
M <- matrix(c(3:14),nrow = 4, byrow = TRUE)

# Ebyrow为FALSE元素按列排列
N <- matrix(c(3:14),nrow = 4, byrow = FALSE)

# 行名和列名也可在创建完矩阵之后再定义:
rownames(N) = c("row1","row2","row3","row4")
colnames(N) = c("col1","col2","col3")

5.2 矩阵操作

# 创建矩阵
x <- matrix(1:10,nrow = 2)

#访问第二行
x[2,]

# 访问第二列
x[,2]

#访问第一行第四个元素:
x[1,4]

#修改矩阵中的元素
#修改一整行
x[2,] <- c(11:15)

#修改某个元素:
x[1,4] <- 10

#获取矩阵的维度
dim(x)

#获取矩阵的行数和列数
dim(x)[1]
dim(x)[2]

nrow(x)
ncol(x)

#转置矩阵 t(M)
M <- matrix(c(1:6),nrow = 2,ncol = 3,byrow = TRUE)
M
t(M)

#矩阵简单加减乘除:必须行数和列数都相等
m1 <- matrix(c(1,2,3,4,5,6),nrow = 2)
m2 <- matrix(c(6,5,4,3,2,1),nrow = 2)
m1+m2
m1-m2
m1*m2
m1/m2

#线性代数中的矩阵相乘:要求第一个矩阵的列数等于第二个矩阵的行数
m1 <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3)
m2 <- matrix(c(6,5,4),nrow = 3,ncol = 1)
m1 %*% m2

# 矩阵求行,列之和,平均数
a <- matrix(1:10,2,byrow = TRUE)
a
rowSums(a) #按行求和
colSums(a) #按列求和

mean(a) #均值
rowMeans(a) #行均值(返回一个向量)
colMeans(a) #列均值(返回一个向量)
mean(rowMeans(a))
mean(colMeans(a))

# 矩阵行拼接,列拼接
#rnorm随机生成一组符合正态分布的小数,Console下:?rnorm获取用法
a <- matrix(rnorm(15),5,3) 
b <- matrix(rnorm(15),5,3) 

#从1到10之间取三个随机整数数字,且不能重复
sample(1:10,3,replace = F)
#从1到10之间取10个随机整数数字,且可以重复
sample(1:10,10,replace = T)


cbind(a,b) #列拼接
rbind(a,b) #行拼接

# 求逆矩阵 solve()函数
a <- matrix(sample(1:10,16,replace = T),nrow = 4)
solve(a)

#矩阵与其逆矩阵的乘积为单位矩阵,round()取整函数
round(solve(a)%*%a)

#奇异矩阵不存在逆矩阵,但是可以计算其广义逆矩阵
a <- matrix(1:16,4,4)
library(MASS)
ginv(a)


mat <- matrix(1:16,4,4)
diag(mat) #提取矩阵的主对角线元素

# 生成对角线为1的4×4对角矩阵
m <- diag(4)

# 求矩阵的特征值和特征向量
d <- matrix(c(17,22,27,22,29,36,27,36,45),3,3)
d.e = eigen(d)

#矩阵的奇异值分解
A <- matrix(1:18,3,6)
A.s <-  svd(A)
A.s$u%*%diag(A.s$d)%*%t(A.s$v) 

6.数组

# array() 函数语法格式如下:
array(data = NA,dim = c(2,3,4),dimnames = NULL)
# data向量,数组元素
#dim数组的维度,默认是一维数组
#dimnames维度的名称,必须是个列表,默认情况下是不设置名称的

#创建数组
dim1 <- c("A1","A2","A3")
dim2 <- c("B1","B2","B3")
dim3 <- c("C1","C2","C3")
z <- array(1:27,c(3,3,3),dimnames = list(dim1,dim2,dim3))


#访问数组中的元素
#显示数组第二个矩阵中第三行的元素
print(z[3,,2])

#显示数组第一个矩阵中第一行第三列的元素
print(z[1,3,1]) # 行 列 高

#输出第二个矩阵
print(z[,,2])

# 从数组中创建矩阵
matrix1 <- z[,,1]
matrix2 <- z[,,2]

你可能感兴趣的:(R语言课程笔记,学习,r语言,开发语言)