最近在复习数据挖掘课程内容,hhh确实是兜兜转转从去年学到了今年

去年的课程笔记整理:#R语言数据挖掘
今年重新学习一遍,所以准备补充一些知识点,以及找几个GEO芯片数据实战分析一下。
在单细胞分析中,我们读取多个单细胞数据集时通常会用到lapply()函数,循环读取多个数据集
比如在技能树最近如何整合多个单细胞数据集推文中,就多次用到了lapply()函数
dir='GSE152938_RAW'
samples=list.files( dir )
samples
sceList = lapply(samples,function(pro){
# pro=samples[1]
print(pro)
tmp = Read10X(file.path(dir,pro ))
if(length(tmp)==2){
ct = tmp[[1]]
}else{ct = tmp}
sce =CreateSeuratObject(counts = ct ,
project = pro ,
min.cells = 5,
min.features = 300 )
return(sce)
})
do.call(rbind,lapply(sceList, dim))
正好复习R语言基础的时候,学到了apply()和lapply()两个函数,那一起来了解一下隐式循环吧!
apply()函数
apply()一般用于处理矩阵/数据框,返回通过将函数应用于数组或矩阵的边距而获得的向量或数组或值列表。
基本语法为:
apply(X, MARGIN, FUN, ..., simplify = TRUE)
X:要处理的数据框/矩阵名
MARGIN:对于矩阵,1表示行,2表示列,c(1,2)表示行和列。
FUN:函数,即对x的每一行/列执行FUN这个函数
simplify:表明是否应简化结果的逻辑,一般默认为 = TRUE
使用的小栗子:
#循环处理数据
test<- iris[1:6,1:4]
apply(test, 2, mean)# 对test的每一列求平均值
apply(test, 1, sum)# 对test的每一行求和
#批量画图
par(mfrow = c(2,2))
apply(iris[,1:4], 2, plot)

lapply()函数
lapply返回与X长度相同的列表,其中的每个元素都是将FUN应用于X的相应元素的结果。
lapply是apply()函数的变种,主要用于处理列表/向量(列表/向量没有行和列的概念,所以会比对矩阵/数据框的操作更简单一些),也更适用于批量读取数据或者处理统计数据
基本语法为:
lapply(X, FUN, ...)
X:向量(原子或列表)或表达式对象。其他对象(包括分类对象)将被base::as.list强制转换。
FUN:函数,即对x的每一行/列执行FUN这个函数。对于像+、%*% 这样的函数,函数名必须加上反引号或引号。
使用的小栗子:
#批量装包
pks = c("tidyr","dplyr","stringr")
qa = function(g){
if(!require(g,character.only =T))
install.packages(g,ask=F,update =F)
}
lapply(pks,qa)
#批量画图
par(mfrow = c(2,2))
lapply(1:4,function(i){plot(iris[,i],col = iris[,5])})

Sapply和Vapply简介
Sapply是lapply的用户友好版本和包装器,默认情况下通过应用simplify2array()返回一个向量、矩阵,如果simplify = "array",则在适当情况下返回一个数组。sapply(x, f, simplify = FALSE, USE。NAMES = FALSE)与lapply(x, f)相同。
Vapply类似于sapply,但它有一个预先指定的返回值类型,因此使用它可能更安全(有时更快)。
使用apply或者lapply函数时,都有FUN参数,就是我们在执行循环时需要用的函数,这个函数可以是内置的比如mean或者sum等函数,也可以由我们自己构建
如果需要写对应需求的函数,那就需要用到function()函数——写函数的函数,因为本人的R语言基础暂时还不足以解释这个函数,所以就附上小洁老师在数据挖掘的PPT

参数

function函数