2.lapply() function lapply()函数输入为 list, vector or data.frame,输出为list。 lapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x 3.sapply() function sapply() 输入为 list, vector or data.frame ,输出为 vector or matrix. sapply()与 lapply(
在我之前转载的文章《apply,lapply,sapply用法探索》中已经对R中apply家族函数进行了比较详细地说明,这篇文章基于我在data campus中对lapply、sapply、vapply function basics <- function(x) { c(min = min(x), mean = mean(x), median = median(x), max = max(x)) } lapply > lapply(temp, basics) [[1]] min mean median max -1.0 4.8 6.0 9.0 [[2]] min If the output that lapply() would generate can be simplified to an array, you'll want to use vapply() If simplification is not possible, simply stick to lapply().
3. lapply函数 lapply函数是一个最基础循环操作函数之一,用来对list、data.frame数据集进行循环,并返回和X长度同样的list结构作为结果集,通过lapply的开头的第一个字母’ 函数定义: lapply(X, FUN, ...) ,那么直接使用lapply就不能达到想要的效果了。 > lapply(data.frame(x), sum) $x1 [1] 12 $x2 [1] 12 lapply会自动把数据框按列进行分组,再进行计算。 > sapply(data.frame(x), sum) x1 x2 12 12 # 检查结果类型,sapply返回类型为向量,而lapply的返回类型为list > class(lapply(
#lapply函数 #可以循环处理列表中的每一个元素 #lapply(参数):lapply(列表,函数/函数名,其他参数) #总是返回一个列表 #sapply:简化结果 #结果列表元素长度均为1,返回向量 #结果列表元素长度相同且大于1,返回矩阵 > str(lapply) function (X, FUN, list(a=1:10,b=c(11,21,31,41,51)) > x $`a` [1] 1 2 3 4 5 6 7 8 9 10 $b [1] 11 21 31 41 51 > lapply (x,mean) $`a` [1] 5.5 $b [1] 31 > x <- 1:4 > lapply(x,runif) [[1]] [1] 0.5754994 [[2]] [1] 0.3157821 (x,function(m) m[1,]) $`a` [1] 1 3 5 $b [1] 4 6 > x <- list(a=1:10,b=c(11,21,31,41,51)) > lapply(x,
这个读取及合并操作可以使用lapply和do.call来完成。 示例如下: ###1. 先模拟几个数据文件,以用于导入### # 创建6个文件,每个文件有一个数据框,为一行三列数据,列名a,b,c dir.create("test") lapply(1:6, function(x){ - data.frame(a=x,b=x,c=x) write.table(df, file=paste0("test/",x,".txt"), row.names = F) }) ###2. lapply do.call来调用rbind去合并6个文件### library(magrittr) # 读入数据 file_list <- list.files("test", full.names = T)%>%lapply xi)) : # names do not match previous names 这个时候,可以手动打开原文件,然后修改列名,也可以将数据框转换为matrix,比如: file_mat <- lapply
❞ apply 家族包括以下几个函数: ❝lapply:用于遍历列表中的每一个元素,并对其执行函数操作。 sapply:与 lapply 类似,但它自动将结果转换为向量、矩阵或数组。 ❞ 下面是 lapply 的基本语法: lapply(数据, 函数) 其中,数据是一个列表或其他数据类型,函数是要对数据执行的操作。 使用 lapply 函数对列表中的每个字符串执行 toupper 函数 lapply(x, toupper) [[1]] [1] "APPLE" [[2]] [1] "BANANA" [[3]] [1] "CHERRY" 注意,lapply 函数的返回值是一个列表,其中每个元素表示对应的数据执行函数后的结果。 它的基本语法与 lapply 类似,只是将 lapply 替换为 sapply 即可。
There are some functions which implement looping to make life easier lapply: Loop over a list and evaluate a function on each elementsapply: Same as lapply but try to simplify the result apply: Apply a function An auxiliary function split is also useful, particularly in conjunction with lapply lapply lapply takes a list, regardless of the class of the input. x <- list(a = 1:5, b = rnorm(10)) lapply(x, mean) x <- list(a = 1:4, b = rnorm(10), c = rnorm(20, 1), d = rnorm(100, 5)) lapply(x, mean) > x <- 1:4 > lapply
隐式循环 在单细胞分析中,我们读取多个单细胞数据集时通常会用到lapply()函数,循环读取多个数据集 比如在技能树最近如何整合多个单细胞数据集推文中,就多次用到了lapply()函数 dir='GSE152938 (sceList, dim)) 正好复习R语言基础的时候,学到了apply()和lapply()两个函数,那一起来了解一下隐式循环吧! ()函数 lapply返回与X长度相同的列表,其中的每个元素都是将FUN应用于X的相应元素的结果。 lapply是apply()函数的变种,主要用于处理列表/向量(列表/向量没有行和列的概念,所以会比对矩阵/数据框的操作更简单一些),也更适用于批量读取数据或者处理统计数据 基本语法为: lapply( mfrow = c(2,2)) lapply(1:4,function(i){plot(iris[,i],col = iris[,5])}) Sapply和Vapply简介 Sapply是lapply
lapply() 上面的apply()函数有一个约束,数据必须是至少2维的矩阵,apply()函数才能对其执行。lapply()函数删除了这个约束。 由于我们现在处理的是向量/列表,lapply函数也不需要MARGIN参数。也就是说,lapply的返回类型也是一个列表。 使用lapply查看输出的差异: sum_lapply1 <- lapply(data, sum) sum_lapply1 ? lapply()提供了什么输出? sum_lapply2 <- lapply(data, sum) sum_lapply2 ? 让我们将其与lappy()在相同数据上的输出进行比较: sum_lapply3 <- lapply(data, sum) #output sum_lapply3 ?
可能会有小伙伴问sapply和lapply有什么区别呢!? ok, sapply()函数与lapply()函数类似,但返回的是一个简化的对象,例如向量或矩阵。 dataset_corpus <- lapply(dataset_s, function(x) Corpus(VectorSource( toString(x) ))) ---- 然后再把Cporus dataset_corpus_all <- lapply(dataset_corpus_all, tm_map, removePunctuation) dataset_corpus_all <- lapply (dataset_corpus_all, tm_map, removeNumbers) dataset_corpus_all <- lapply(dataset_corpus_all, tm_map, been","says", "will","also","where","why","would","today") dataset_corpus_all <- lapply
概述 在实际的工作中,我们总要面对各种各样的数据结构处理,这些操作可以使用循环来完成,但是容易造成内存的占用,以前其实了解过这方面的函数,但是记不清,因此整理下 主要函数如下 apply lapply Sepal.Length Sepal.Width Petal.Length Petal.Width 5.843333 3.057333 3.758000 1.199333 lapply 函数 lapply函数和apply函数的差别在于,lapply输出的为一个列表 参数方面少了margin 示例 x<-lapply(iris[,1:4],mean,na.rm=T) # 因为输出的为list
, ...) lapply Apply a Function over a List or Vector对列表或者向量使用函数 lapply(X, FUN, ...) sapply Apply a Function lapply的使用格式为: lapply(X, FUN, ...) lapply的返回值是和一个和X有相同的长度的list对象, 这个list对象中的每个元素是将函数FUN应用到X的每一个元素。 sapply(*, simplify = FALSE, USE.NAMES = FALSE) 和lapply(*)的返回值是相同的。 lapply中所要使用的函数,一定需要是输入为单一变量,输出为单一变量可以存至list中。 例如: a=function(x)[ x=names(x) x[x=="a"] } lapply(y,a) 从这段代码大致可以了解到,lapply精髓在输入与输出。
###基因转换 library(clusterProfiler) library(org.Mm.eg.db) # x <- names(mm.pairs)[1] trs <- lapply(names( df <- df[first$ENSEMBL %in% df$first,] df <- df[second$ENSEMBL %in% df$second,] df$first <- lapply (df$first, function(x){ first[first$ENSEMBL == x,2][1] }) %>% unlist() df$second <- lapply df <- df[first$ENSEMBL %in% df$first,] df <- df[second$ENSEMBL %in% df$second,] df$first <- lapply (df$first, function(x){ first[first$ENSEMBL == x,2][1] }) %>% unlist() df$second <- lapply
定义函数后,我们可以在任何需要函数的地方应用它,例如可以作为lapply函数的第二个参数(参见方法6.2): > cv <- function(x) sd(x)/mean(x) > lapply(lst 先前的例子中我们提到将cv函数作为lapply函数的一个参数,而若使用匿名函数直接作为lapply函数的参数,则能将原先的命令简化至同一行中: > lapply(lst, function(x) sd( 定义函数后,我们可以在任何需要函数的地方应用它,例如可以作为lapply函数的第二个参数(参见方法6.2): > cv <- function(x) sd(x)/mean(x) > lapply(lst 先前的例子中我们提到将cv函数作为lapply函数的一个参数,而若使用匿名函数直接作为lapply函数的参数,则能将原先的命令简化至同一行中: > lapply(lst, function(x) sd(
/lib.R')##10X标准格式dir='GSE212975_10x/'samples=list.files( dir )samples sceList = lapply(samples,function library(data.table)library(dplyr)library(ggplot2)library(patchwork)library(stringr)1.2 代码解释sceList = lapply do.call(rbind, lapply(sceList, dim))lapply(sceList, dim):lapply 函数遍历 sceList中的每个Seurat对象,并对每个对象应用 dim :do.call 函数将 lapply 返回的结果(每个对象的维度)按行绑定(rbind),生成一个矩阵,矩阵的每一行对应一个样本的数据维度。这个矩阵便于查看每个样本的基因数和细胞数。 /lib.R')dir='GSE129516_csv/'samples=list.files( dir )samples sceList = lapply(samples,function(pro){
with multiple data types # Should show barcodes.tsv.gz, features.tsv.gz, and matrix.mtx.gz sceList = lapply 所以我猜测应该是他的10X的3个文件里面并没有过滤,把全部的barcode输出了,我就给他加上了一个简单的检查代码,以及两个标准过滤: lapply(sceList, function(x) print pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5) sceList = lapply function(x) { subset(x, subset = nFeature_RNA > 200 & nFeature_RNA < 8000 & nCount_RNA > 400) }) lapply sceList = sceList = lapply(sceList, function(x) { rownames(x)[grepl('^mt-',rownames(x),ignore.case
pixels from center) res <- 10e3 buffer <- 10 ## Filter out short loop interactions filteredLoops <- lapply filterBedpe, res = res, buffer = buffer) |> `names<-`(value = names(loopList)) lapply buffer = buffer) ## Calculate APA matrices for loops from FS Hi-C data loopApaFsHic <- lapply data("loopApaWtHic") data("loopApaFsHic") lapply(loopApaWtHic, dim) lapply(loopApaFsHic, dim) 在对这些矩阵进行可视化之前 ## Get the number of loops for each condition nLoops <- lapply(filteredLoops, length) ## Divide each
R语言中有几个常用的函数,可以按组对数据进行处理,apply, lapply, sapply, tapply, mapply,等。这几个函数功能有些类似,下面介绍下这几个函数的用法。 Lapply 前面说到apply是对于matrix和array的,针对list,我们可以使用lapply函数。该函数接收list,返回的结果也是一个list。 其调用如下: Apply(数据,运算函数,函数的参数) 对于Data Frame来说,如果不同的列有不同的数据类型,不能转换成Matrix,但是却可以转换成List,然后使用lapply函数。 lapply返回的结果和传入的List的结构相同,传入多少个Item,返回的也是多少个Item。 Sapply Sapply函数和Lapply函数很类似,也是对List进行处理,只是在返回结果上,Sapply会根据结果的数据类型和结构,重新构建一个合理的数据类型返回。
(fs, function(i){ read.table(file.path('GSE123005_RAW/',i),header = T) }) lapply(dat, head) do.call (rbind,lapply(dat, dim)) 可以看到,确实是每个txt的行数不一样哦: > do.call(rbind,lapply(dat, dim)) [,1] [,2] [ 这个时候并没有最好的部分,我们只能说先往后面走: dat = lapply(dat, function(x){ # x=dat[[2]] x=x[x[,5]>0.1,] x=x[x[,1]! duplicated(x[,1]),] rownames(x)=x[,1] x }) ids=unique(unlist( lapply(dat,rownames))) df = do.call (cbind, lapply(dat, function(x){ x[ids,5] })) head(df) rownames
apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。 apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。 2.lapply和sapply函数 lapply和sapply函数可以用于处理列表数据和向量数据(vector/list)。 lapply函数得到处理得到的数据类型是列表,而sapply函数得到处理的数据类型是向量。这两个函数除了在返回值类型不同外,其他方面基本完全一样。 ? ?