首页
学习
活动
专区
圈层
工具
发布

「R」apply,lapply,sapply用法探索

本文节选自张丹的《R的极客理想》系列。 1. apply的家族函数 apply函数族是R语言中数据处理的一组核心函数,通过使用apply函数,我们可以实现对数据的循环、分组、过滤、类型控制等操作。...很多R语言新手,写了很多的for循环代码,也不愿意多花点时间把apply函数的使用方法了解清楚,最后把R代码写的跟C似得,我严重鄙视只会写for的R程序员。...apply函数本身就是解决数据循环处理的问题,为了面向不同的数据类型,不同的返回值,apply函数组成了一个函数族,包括了8个功能类似的函数。这其中有些函数很相似,有些也不是太一样的。 ?...,用for循环实现的计算是耗时最长的,apply实现的循环耗时很短,而直接使用R语言内置的向量计算的操作几乎不耗时。...会分别循环矩阵中的每个值,而不是按行或按列进行分组计算。

4.9K32

131-R茶话会23-R的随机数有点坑

前言 最近我在复现一篇文章的操作。发现每一次生成的结果都有所不同。 难道是我的操作出了问题?难道是我用的R 包版本不对,函数不同?难道是随机数的问题? 后来发现,果然是随机数的问题。...电脑永远无法真正实现随机数,R 也不例外,关于生成看似“随机”数的原理,可以参考:Set.seed in R - Control Random Numbers - ProgrammingR[1] 如果我们想要控制随机数...换句话说,如果你的循环调用了随机函数,则这个seed 一定要设定在循环内部,否则你永远无法重复出自己的代码。...此外,我也推荐大家在写涉及到随机数的代码时,使用withr::with_seed,起码告诉并且提醒自己,哪个种子,对应哪个随机函数。防止被吞,或者吞了其他人的种子。...额外补充 并不是所有R 的使用者都会注意到随机数的问题了。因此,考虑是否发生随机数的一个方法是,既然set.seed是即用即废,那么这也是个用来判断某个步骤是否调用了随机数的方法。

62510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【R语言经典实例8】如何定义一个R函数。

    问题 如何定义一个R函数。 解决方案 使用关键字function,并在其后跟随函数参数列表和函数主体。...先前的例子中我们提到将cv函数作为lapply函数的一个参数,而若使用匿名函数直接作为lapply函数的参数,则能将原先的命令简化至同一行中: > lapply(lst, function(x) sd(...条件执行 R语法中包含if语句,更多详情可以使用help(Control)命令查看。 循环语句 R语法中也包括for循环、while循环以及repeat循环语句。...2.12 定义函数 问题 如何定义一个R函数。 解决方案 使用关键字function,并在其后跟随函数参数列表和函数主体。...先前的例子中我们提到将cv函数作为lapply函数的一个参数,而若使用匿名函数直接作为lapply函数的参数,则能将原先的命令简化至同一行中: > lapply(lst, function(x) sd(

    3.1K40

    R语言中的apply函数族

    前言 apply函数族是R语言中数据处理的一组核心函数,通过使用apply函数,我们可以实现对数据的循环、分组、过滤、类型控制等操作。...很多R语言新手,写了很多的for循环代码,也不愿意多花点时间把apply函数的使用方法了解清楚,最后把R代码写的跟C似得。...简介 由于R语言的apply家族函数是用C写的,所以使用apply进行遍历的执行效率远远高于自己编写的循环语句。...lapply就不能达到想要的效果了,lapply会分别循环矩阵中的每个值,而不是按行或按列进行分组计算。...eapply函数平时很难被用到,但对于R包开发来说,环境空间的使用是必须要掌握的。特别是当R要做为工业化的工具时,对变量的精确控制和管理是非常必要的。

    4.8K52

    隐式循环及function函数

    隐式循环 在单细胞分析中,我们读取多个单细胞数据集时通常会用到lapply()函数,循环读取多个数据集 比如在技能树最近如何整合多个单细胞数据集推文中,就多次用到了lapply()函数 dir='GSE152938...(sceList, dim)) 正好复习R语言基础的时候,学到了apply()和lapply()两个函数,那一起来了解一下隐式循环吧!...apply()函数 apply()一般用于处理矩阵/数据框,返回通过将函数应用于数组或矩阵的边距而获得的向量或数组或值列表。...FUN:函数,即对x的每一行/列执行FUN这个函数 simplify:表明是否应简化结果的逻辑,一般默认为 = TRUE 使用的小栗子: #循环处理数据 test<- iris[1:6,1:4] apply...写函数的函数——function() 使用apply或者lapply函数时,都有FUN参数,就是我们在执行循环时需要用的函数,这个函数可以是内置的比如mean或者sum等函数,也可以由我们自己构建 如果需要写对应需求的函数

    40010

    高效R编程

    ,而R语言这些不用你负责,优点是可交互,缺点是运行速度慢,特别是糟糕的代码,推荐书《The R Inferno》。...向量化代码 for循环代码慢不是因为循环,而是因为函数调用太多。 与用户交互 致使错误stop() stop()抛出致命错误,执行终止,不再执行任何操作,下面的处理代替stop()更好些。...#警告Warning() 解决警告,而不是忽略它。suppressWarnings()#隐藏警告 信息输出 message()可以给出预计运行时间。...sapply()和vapply()与lapply()类似,返回值不一定是列表。 类型一致 函数的返回值以同样的形式是个好习惯,但是不是所有函数都这样,比如:sapply() ,这会导致意想不到的问题。...缓存变量 也就是把一个计算过程存为变量,而不是每次计算,如果是100*1000的矩阵,速度会相差100倍。缓存更高级的形式是memoise 包,将已知结果存入可检索的缓存,加快运行速度。

    1.5K30

    几种加快R语言运算的方法

    提升R代码运行速度并不需要很高级的优化技术, 例如代码并行化, 使用数据库, 使用c++等....实际上, 通过简单的操作, 就能够是R的运算速度显著的加快, 下面介绍几种方法. 1, 向量化 R语言允许用户进行向量化编程, 这样速度更快....比如我们计算100万随机数, 计算他们的平方, 这里使用两种方法: 第一种, for循环; 第二种, 向量化 set.seed(123) dat= rnorm(1000000) for循环 system.time...apply函数代替for循环 apply函数及其变种: lapply sapply tapply 如果各个迭代之间相互独立, 那么apply函数是可以代替for循环的 for循环 set.seed(123...(dat, FUN=square)}) user system elapsed 0.62 0.03 0.66 4, 使用matrix而不是data.table 在矩阵运算时

    2.6K20

    R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)

    R用户只需要将现有程序转化为*apply或者for的循环形式之后,通过简单的API替换来实现并行计算。...循环)、SupR、还有利用GPU的办法(gpuR) 同时并行时对内存的消耗极大,超级容易爆发内存问题,而且R的内存问题一直都是R很难解决的问题,这边笔者也把看到的一些方式列出来。...lapply在使用的时候也会出现这样的问题,如果出现问题,那么就白跑了,而且也不可能给你停顿下来。那么如何让lapply运行中跳过报错的办法呢?...5、parSapply/parLapply函数使用技巧 函数的大体结构是: parSapply(cl,x,fun) 其中cl是预先设定好的,x是需要循环的变量,而fun是函数...—————————————————————————————————— 二、foreach包的使用方法 1、简单使用案例 设计foreach包的思想可能想要创建一个lapply和for循环的标准,初始化的过程有些不同

    9.4K10

    生信编程直播课程优秀学员作业展示1

    ,也有查看当前已有变量数值的功能) 关于open(file, 'rt')的解释 w,r,wt,rt都是python里面文件操作的模式。...类Unix平台的换行符是\n,而windows平台用的是\r\n两个ASCII字符来表示换行,python内部采用的是\n来表示换行符。...和numpy,很多步骤还没有优化 未去重overlap结果为:36046283 编程感悟 由于开始R是没有基础的,用通过R包swirl学习了一下lapply,apply和sapply函数的使用,对于迭代数目比较多的循环来说...,R语言的for循环效率远远不如apply系列函数,应该尽量避免for循环处理,而python的for循环运算速度较快,可以使用for循环处理一下比较大的数据。...本文编辑:思考问题的熊

    1.1K60

    R语言中的批处理函数

    在R语言中,apply系列函数作为批量处理函数,可以循环遍历某个集合内的所有或部分元素,以简化操作。这些函数底层是通过C来实现的,所以效率也比手工遍历来的高效。...1.apply函数 apply函数只能用于处理矩阵类型的数据,也就是说所有的数据必须是同一类型。因此要使用apply函数的话,需要将数据类型转换成矩阵类型。...lapply函数得到处理得到的数据类型是列表,而sapply函数得到处理的数据类型是向量。这两个函数除了在返回值类型不同外,其他方面基本完全一样。 ? ?...也就是说tapply函数就是把数据按照一定方式分成不同的组,再在每一组数据内进行某种运算。 ? 4.mapply函数 mapply函数主要是对多个列表或者向量参数使用函数. ?...总结以上函数应用可以减少在R语言中的For循环,从而提升R语言效率。 欢迎各位学习交流

    3K20

    R语言︱数据分组统计函数族——apply族用法与心得

    笔者寄语:apply族功能强大,实用,可以代替很多循环语句,R语言中不要轻易使用循环语句。...lapply与函数sapply 每一列数据采用同一种函数形式,比如求X变量得分位数,比如求X变量的循环函数。...lapply的使用格式为: lapply(X, FUN, ...) lapply的返回值是和一个和X有相同的长度的list对象, 这个list对象中的每个元素是将函数FUN应用到X的每一个元素。...X 一个列表 classes 关于类名的字符向量,或者为any时则匹配任何类 deflt 默认结果,如果使用了how=”replace”,则不能使用 how 字符串匹配三种可能结果 参考文献:...lapply中所要使用的函数,一定需要是输入为单一变量,输出为单一变量可以存至list中。

    3.8K30

    快速掌握apply函数家族推荐这篇文档

    ❝apply 家族是 R 语言中常用的函数,用于对列表、数组或其他类型的数据进行循环操作。 ❞ apply 家族包括以下几个函数: ❝lapply:用于遍历列表中的每一个元素,并对其执行函数操作。...sapply:与 lapply 类似,但它自动将结果转换为向量、矩阵或数组。 apply:用于对矩阵或数组的行、列或其他维度进行循环操作。...❝如果想要将结果转换为向量、矩阵或数组,可以使用 sapply 函数。它的基本语法与 lapply 类似,只是将 lapply 替换为 sapply 即可。...另外,apply 函数用于对矩阵或数组的行、列或其他维度进行循环操作。...总结 ❝apply 家族是 R 语言中常用的函数,用于对列表、数组或其他类型的数据进行循环操作。它们包括 lapply、sapply、apply 和 tapply 函数,每个函数都有各自的用途。

    3.3K30

    R语言从入门到精通:Day6

    图1:均值和标准差的两种实现 实际上我们还是借用了求和函数,就算如此,代码量也有所增加。上面这些简单而重要的统计函数将会伴随你使用R语言的全部旅程。 3....后面我们也可以单独讲一下正则表达式的规则和用法)。关于R中的字符串处理,还有一个非常强大的R包,就是stringr包,大家可以自己装一下这个包,运行学习一下。 5....函数的应用(了解) R的诸多特点之一,就是R的函数的使用很灵活,不仅可以应用在标量上,也可以照搬到向量、矩阵等高维数据类型。...重复和循环(掌握) R语言中的循环主要有for和while两种结构,语法示例如下: ? 但是R语言中的循环语句效率不高,大型数据集中不太推荐这种用法。...Tips: 大型数据集,记得用lapply, sapply, tpply这一类的高级迭代循环哦~ 2.

    85411

    R语言的数据结构(包含向量和向量化详细解释)

    更多内容请参考《R语言编程艺术》 ——————————————— 向量类型是R语言的核心。深入理解向量对R中数据结构及其操作,函数的开发和应用有着重要意义。...2向量的循环补齐 两个向量使用运算符,如果两个向量长度不同,R会自动循环补齐(recycle),也就是它会自动重复较短的向量,直到与另外一个向量匹配。...5 列表和数据框(都不是向量) 5.1 列表 列表创建及基本结构 向量的元素要求同种类型,而列表list与向量不同,可以组合多个不同类型的对象。所以列表不是向量。...还有合并 apply族函数在数据框中的用法 apply lapply sapply apply 如果数据框的每一列的数据类型相同,则可以对该数据框使用apply函数。或针对数据框中的某些列应用。...其中返回的1232代表的是第1,2,3,2个水平,在这里这些数字已经重新编码为水平,而不是数值2,是水平2.

    7.8K20

    R海拾遗-apply家族学习

    概述 在实际的工作中,我们总要面对各种各样的数据结构处理,这些操作可以使用循环来完成,但是容易造成内存的占用,以前其实了解过这方面的函数,但是记不清,因此整理下 主要函数如下 apply lapply...X 处理的数据框 MARGIN 1表示对行,2表示对列处理,c(1,2)表示对行列进行操作 FUN 函数,可以为自定义函数,或者为内置函数 示例 # 使用iris数据集进行测试 data(iris) #...函数 lapply函数和apply函数的差别在于,lapply输出的为一个列表 参数方面少了margin 示例 xlapply(iris[,1:4],mean,na.rm=T) # 因为输出的为list...tapply函数一般对数据进行分组描述时使用 tapply(X, INDEX, FUN = NULL) 参数 -X: 一个对象,一般都是向量 -INDEX: 一个包含分类因子的列表 -FUN: 对X里面每个元素进行操作的函数...apply函数的家族还有很多,这里只是了解了其中几个,其他的内容用到的概率不是很高。

    87130

    用data.table语句批量处理变量

    写 在前面 本期“大猫R语言公众号”仍由“村长”供稿。村长继续为大家奉上data.table使用案例心得,希望大家能够继续支持村长!!...批 量处理法:用lapply批量处理变量 在此时lapply的妙用就显现出来了,在R中lapply用来对list中每一个element进行相同处理,如何把它运用到data.table,话不多说先上代码:...而我们要处理的变量是第3个到第34个,所以在.SD中选出3至34列,运用lapply对选中的.SD[, 3:34]里面每一个element使用as.Date函数。 再看,':='的左边。...注 意事项:.SD用法 可以说.SD是data.table处理中非常重要的一个用法,但也切勿乱用,在这里笔者发现了一个关于.SD的问题,首先我们改一下代码: # 将 := 左边的DT改成.SD ----...运行有报错,这就需要注意.SD的用法了,我们首先看报错提示语句的意思是::=的左边并不是字符、整数或者数值格式。

    1.3K30

    V5版seurat读取不同格式单细胞数据

    读取不同格式的单细胞转录组数据及遇到问题的解决办法 当时我在学习单细胞的时候,读取数据都是按照推文里面的方法使用的,也就有了不同格式单细胞数据下载及读取分析流程这篇笔记。...而在V5版的seurat中如果是分开读取多个文件后,再使用merge函数其实并没有把每个样品的表达量矩阵merge。...使用Seurat的v5来读取多个10x的单细胞转录组矩阵 使用Seurat的v5来读取多个不是10x标准文件的单细胞项目 不同格式单细胞多数据读取方法 读取数据进行分析之前,我们需要安装加载需要的R包,...head(sce.all@meta.data) h5格式 h5格式其实也有对应的函数Read10X_h5()可以直接读取,但是Read10X_h5使用循环读取多个数据文件,会返回一个list,需要手动整合一下...参考推文:使用Seurat的v5来读取多个不是10x标准文件的单细胞项目 txt.gz格式 dir='.

    5.5K24

    R语言:data.table语句批量生成变量

    写在前面 本期依然由村长为大家供稿,只为填上一期最后挖的坑,话不多说进入正题。 问题提出 在上一期中,还记得我们留下的那个彩蛋吗?...:= 右边 关于 ':= lapply' 的用法,在这里小编不再赘述,如果大家对此不是很熟悉可以看这一期公众号:用data.table语句批量处理变量。...在这里通过链接中的推送的lapply使用原理,再加上stringr包中str_match这个函数的使用,截取出诊断结果中出现过的继发性醛固酮或者醛固酮,没有出现过的自动记为NA。...:=’ 左边格式的问题: ':=' 左边的格式应该是一个向量,一个带有需要被处理变量的字符格式的向量,这一点从colnames这个函数的使用可以得知。...大猫的微信号是: iRoss2007 村长的B站主页是:http://space.bilibili.com/40771572 大猫的R语言课堂关注R语言、数据挖掘以及经济金融学。

    1.3K20

    【测评】提高R运行效率的若干方法

    首先,我们看看最花费时间的这段函数: 第一招:用apply函数代替For循环 其实我们知道在R里面最能提升效率的一个方法就是少用For循环,多用apply,因为R是面向数组的语言,apply面向数组遍历...站长这里用的lapply函数自然是极好的,特别适合遍历list元素,因为事前把lungTMP这个表的rowname装到了list里面,用lapply(相当于list+apply)来遍历,真的值得大家都来学习...第二招:利用函数编译提高效率 既然循环没有问题,那我猜会不会是cor.test这个函数计算花费的时间太长了。...第四招:利用data.table数据结构 既然计算相关性耗时不是决定性因素,有没有可能是因为数据结构的问题,因为最典型的例子就是read.csv和fread的读写文件的巨大差异: 由于data.table...第五招:多线程并行运算 经过上面的尝试之后,我们体会到pathway.score这个函数包含数据索引,计算,递归,循环,建表等诸多操作,因此单独使用一种方法可能对总体速度提高不是很明显,因此最好是能同时计算

    1.5K10
    领券