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(
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().
#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 ?
概述 在实际的工作中,我们总要面对各种各样的数据结构处理,这些操作可以使用循环来完成,但是容易造成内存的占用,以前其实了解过这方面的函数,但是记不清,因此整理下 主要函数如下 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
可能会有小伙伴问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
, ...) 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(
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
/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){
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会根据结果的数据类型和结构,重新构建一个合理的数据类型返回。
apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。 apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。 2.lapply和sapply函数 lapply和sapply函数可以用于处理列表数据和向量数据(vector/list)。 lapply函数得到处理得到的数据类型是列表,而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