首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

本文节选自张丹的《R的极客理想》系列。 1. apply的家族函数 apply函数族是R语言中数据处理的一组核心函数,通过使用apply函数,我们可以实现对数据的循环、分组、过滤、类型控制等操作。...但是,由于在R语言中apply函数与其他语言循环体的处理思路是完全不一样的,所以apply函数族一直是使用者玩不转一类核心函数。...很多R语言新手,写了很多的for循环代码,也不愿意多花点时间把apply函数的使用方法了解清楚,最后把R代码写的跟C似得,我严重鄙视只会写for的R程序员。...我一般最常用的函数为apply和sapply,下面将分别介绍这8个函数的定义和使用方法。 2. apply函数 apply函数是最常用的代替for循环的函数。...通过上面的测试,对同一个计算来说,优先考虑R语言内置的向量计算,必须要用到循环时则使用apply函数,应该尽量避免显示的使用for,while等操作方法。

4.6K32

社交网络分析的 R 基础:(四)循环与并行

下面的示例代码效果是等价的: repeat { # TODO } while (TRUE) { # TODO } for R 语言中的 for 循环更像某些语言中的 foreach,本质上就是遍历向量...R 语言中循环语句的执行效率是无法忍受的,这是因为循环语句是基于 R 语言本身来实现的,而向量操作是基于 C 语言实现的,所以应避免使用显式循环,使用 apply() 系列函数进行替代。...上面的例子说明使用 for 循环不仅代码冗余,而且 for 循环实现的计算是耗时最长的,这就是为什么要了解 apply() 系列函数的原因。...参数上更加精简,处理完成的数据返回的结果集为向量,其定义如下: sapply(X, FUN) 其中 X 是要循环处理的数据,即向量;FUN 是循环处理的函数。...在不使用向量运算的前提下计算向量的平方,使用 sapply() 函数可以这样: > v <- c(1, 2, 3) > sapply(v, function(item) { return(item ^

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

    R语言入门系列之三:R脚本

    写在前面: 在前面两篇文章R语言入门系列之一与R语言入门系列之二中,我分别介绍了R语言中的对象与结构、数据的输入输出及可视化。...基于前面的基础,今天我介绍一下R语言中基础的程序结构,来帮助我们完成更复杂的数据处理任务。此外,如果你有大批量数据处理、可视化任务,需要着重学习R脚本在命令行的调用方式以及命令行参数的使用方法。...写好的R语言程序一般保存为R脚本,这样在以后完成相似数据处理任务时可以方便地直接调用。...如果simplify="array",结果将返回一个数组。举例如下: 4自定义函数 用户可以根据需求自定义函数,R函数是通过使用关键字function来创建。...: 5命令行参数 当在Linux系统命令行运行R脚本时,可以使用commandArgs()设置命令行参数来增强脚本的适用性,我们可以通过下面脚本来查看R语言命令行参数设置规则: Args <- commandArgs

    3.7K20

    R语言中的apply函数族

    前言 apply函数族是R语言中数据处理的一组核心函数,通过使用apply函数,我们可以实现对数据的循环、分组、过滤、类型控制等操作。...但是,由于在R语言中apply函数与其他语言循环体的处理思路是完全不一样的,所以apply函数族一直是初学者玩不转的一类核心函数。...当然你说可以使用 rowSums(x)也一样能得到结果,但是如果稍微复杂点,rowSums函数就不行了。...lapply函数 lapply函数是一个最基础循环操作函数之一,用来对list、data.frame数据集进行循环,并返回和X长度同样的list结构作为结果集,通过lapply的开头的第一个字母’l’就可以判断返回结果集的类型...vapply函数 vapply类似于sapply,提供了FUN.VALUE参数,用来控制返回值的行名,这样可以让程序更健壮。

    4.5K52

    「R」解决R包Check汇报marked UTF-8 strings问题

    于是,我写了下面一段代码: devtools::load_all() data_files <- dir("data") for (i in data_files) { message("Removing...也就是说,虽然我已经删除了文件,但整个包可以已经载入内存,所以无论是否删除这 10 个数据文件,函数内部依旧可以获取到这些数据的信息。...通过 debug(tools:::.check_package_datasets) 我发现事情不是我想的这样,该函数内部会检查 data/ 下的文件并获取文件列表用于载入,本人功底不足,加上 RStudio...对这种特别底层的调试支持不怎么爽利,我没有找到它怎么输出 NOTE 结果的,于是弃疗了该策略。...不过在调试中我发现 Encoding() 函数可以获取字符串编码信息: Encoding("abc") #> [1] "unknown" 所以我尝试载入数据对它的列进行编码查询,发现都是 “unknown

    42250

    高效R编程

    /p/71392ef45d01 很多R语言用户并不认为自己是程序员,我也是:),精通专业知识,理解R语言的标准数据结构,但是缺乏正规编程训练,你是这样的吗?.../p/71392ef45d01很多R语言用户并不认为自己是程序员,我也是:),精通专业知识,理解R语言的标准数据结构,但是缺乏正规编程训练,你是这样的吗?...sapply()和vapply()与lapply()类似,返回值不一定是列表。 类型一致 函数的返回值以同样的形式是个好习惯,但是不是所有函数都这样,比如:sapply() ,这会导致意想不到的问题。...保存函数的运行结果,牺牲缓存换速度,最多能100倍的速度提升,在内存充足的今天应该还好,只要不上大数据,16G内存已经普遍了。典型应用是shiny app,可以回事用户得到结果,减少等待时间。...可以通过基本函数mean()验证: getFunction("mean") # 结果,第三行显示是字节码bytecode function (x, ...)

    1.3K30

    多个探针对应同一个基因取最大值的代码进化历史

    我的GEO芯片数据分析教程本来就是为粉丝写的,基本上就是生信菜鸟团QQ群的诸位问什么,我就临时搜索整理讲解那个知识点,非常融洽,目录如下: 第一讲:GEO,表达芯片与R 第二讲:从GEO下载数据得到表达量矩阵...因为芯片技术已经被时代抛弃,所以我们这里也不继续深究了,我感兴趣的是我的代码进化路程  第一版,使用split结合 sapply 下面代码写于2016年6月左右 library('hgu95av2.db...,可以看我以前学徒的笔记:分组计算描述性统计量函数—by()函数 第三版,使用duplicated和order函数 写完第二个版本的时候,这个生信人的20个R语言习题已经布置给了一百多个学员和学徒,而根据他们的反馈...表达芯片的公共数据库挖掘系列推文感兴趣的也可以去看看; 解读GEO数据存放规律及下载,一文就够 解读SRA数据库规律一文就够 从GEO数据库下载得到表达矩阵 一文就够 GSEA分析一文就够(单机版+R语言版...) 根据分组信息做差异分析- 这个一文不够的 差异分析得到的结果注释一文就够

    2.7K40

    Hadley Wickham 采访节选(一)

    对于广大R爱好者来说,绝对是好奇心的一番巨大满足。 下面就是采访视频的截图: ? 关 于视频听译 虽然钱钟书先生说过“你吃了一个鸡蛋很好吃,为什么要认识生蛋的鸡呢?...我第一次上这门课的时候简直是噩梦——你需要记忆R中各种毫无规律的字符串函数名称,例如grep, grepl, regexpr, gregexpr……后来我有一次在洛杉矶旅行的时候突然有了个主意:为什么我不写个包把所有...这样就可以避免两者在相同函数上的不同实现(implementation),大大方便广大使用者。所以显然,两者是合作的关系。...例如base R中的sapply就不是对象类型一致的,因为sapply会首先尝试返回一个向量,如果实在无法coerce成向量,那么就返回一个list;而 tidyver 库中有个叫做purrr的包,他有个函数叫...map_dbl,和sapply很像,区别就是map_dbl永远只返回double类型,如果结果不是double就报错,因此,map_dbl是“对象一致”的。

    86430

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

    ❝apply 家族是 R 语言中常用的函数,用于对列表、数组或其他类型的数据进行循环操作。 ❞ apply 家族包括以下几个函数: ❝lapply:用于遍历列表中的每一个元素,并对其执行函数操作。...❝如果想要将结果转换为向量、矩阵或数组,可以使用 sapply 函数。它的基本语法与 lapply 类似,只是将 lapply 替换为 sapply 即可。...toupper 函数 sapply(x, toupper) [1] "APPLE" "BANANA" "CHERRY" 注意,sapply 函数的返回值是一个向量,其中的每个元素表示对应的数据执行函数后的结果...函数计算列表中所有数字的平方和 下面的代码使用 sapply 函数计算列表中所有数字的平方和: # 创建列表 x <- list(1, 2, 3, 4, 5) # 使用 sapply 函数计算列表中所有数字的平方和...总结 ❝apply 家族是 R 语言中常用的函数,用于对列表、数组或其他类型的数据进行循环操作。它们包括 lapply、sapply、apply 和 tapply 函数,每个函数都有各自的用途。

    2.9K30

    教你如何优雅的用R语言调用有道翻译

    最近刚发现了个有趣的包,一个R语言发烧友开发了R语言与有道在线翻译的接口,可能这位大神也是一个受够了每天打开网页狂敲键盘查词的罪,索性自己动手,从此丰衣足食。...以下是代码思路,这里我提供两种方法,一种是集合包内翻译函数和for循环,算是笨方法。另一种是对该包封装的函数源码进行了稍许调整,使得输出更加和谐一些。...其实我是觉得这样的不加筛选的输出不够友好,看了下源码里面的封装函数,稍微做了些改动,以下是方法二。...sapply(word,youdaoTranslate,simplify=TRUE) 这里结果摒弃for循环,使用内置的apply组函数sapply,懂行的都知道为什么! ?...以上经过我的进一步筛选,结果更加简洁,实用。 如果是遇到大批量的翻译需求,这种方式还是很能提高效率的,不过我还没有测试中文单词的翻译效果,有兴趣的大家可以自己玩。 你以为到这里就结束了吗? NO!

    1.8K30

    R语言数据清洗实战——世界濒危遗产地数据爬取案例

    最近重复新翻阅R语言领域唯一一本关于网络数据采集的参考书——《基于R语言的自动数据收集》,开篇就是一个数据爬取的案例。...,c(2,5,7,9))] 原始数据非常混乱,我使用stringr结合sapply函数,分别提取了遗产的所在地址、经纬度信息、类别信息等。...以下函数除了sapply之外,我都在最近几篇的推送中有所涉及,特别是正则表达式在本次数据清洗中起到了很大的作用,如果你对正则还不太熟悉,可以参考这篇文化文章。...如何使用管道操作符优雅的书写R语言代码 列表是R里面最为自由、最为包容和灵活的数据对象,是R与外部非结构化数据通讯的唯一窗口,所以熟悉列表操作,是进阶R语言的必经阶段。...原数书作者也是通过正则匹配的经纬度信息,不过使用的预留关键词,而是分了较多步骤,使用正则表达式做字符串清洗的过程就是这样,有无数种方式任你选择,只要达到目的即可,在目标达到的情况下,适当的选择自己熟悉并高效的方式

    2K60

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

    更多内容请参考《R语言编程艺术》 ——————————————— 向量类型是R语言的核心。深入理解向量对R中数据结构及其操作,函数的开发和应用有着重要意义。...为什么叫原子型(atomic):向量的元素已经是最小的,不可再分的。 列表型,又叫递归型,因为是列表中可以继续包括列表。列表中的“元素”就是列表的各组件,其名称叫标签(tag)。...,调用sapply(x,f)可对x的每一个元素使用函数f(),并将结果转化为矩阵。...注意sapply是simplify apply的缩写,简化结果,但不是简单。它也可以用于列表操作,使得结果输出不再是列表,而是向量。类似本处结果的逆操作。最终目的是让结果看起来更自然更简洁。...则sapply可以自动把向量形式的结果转化为矩阵输出 如下 > sapply(1:8,function(x) return(c(x^2, sqrt(x)))) [,1] [,2]

    7.1K20

    隐式循环及function函数

    写在开头 最近在复习数据挖掘课程内容,hhh确实是兜兜转转从去年学到了今年 去年的课程笔记整理:#R语言数据挖掘 今年重新学习一遍,所以准备补充一些知识点,以及找几个GEO芯片数据实战分析一下。...apply()函数 apply()一般用于处理矩阵/数据框,返回通过将函数应用于数组或矩阵的边距而获得的向量或数组或值列表。...FUN:函数,即对x的每一行/列执行FUN这个函数。对于像+、%*% 这样的函数,函数名必须加上反引号或引号。...写函数的函数——function() 使用apply或者lapply函数时,都有FUN参数,就是我们在执行循环时需要用的函数,这个函数可以是内置的比如mean或者sum等函数,也可以由我们自己构建 如果需要写对应需求的函数...,那就需要用到function()函数——写函数的函数,因为本人的R语言基础暂时还不足以解释这个函数,所以就附上小洁老师在数据挖掘的PPT 参数 function函数

    15710

    如何用R进行中文分词?

    不光在R中,在Python等语言中,结巴分词也是最优秀、使用最广的分词包之一。jiebaR是jieba分词的R版本,使用了Rcpp进行编写,充分利用了C++高效的特点。...大家可以把分词器想象成一个自定义的分词函数,这个函数包含了指定的分词模型(一般情况下使用默认的混合模型就可以了)以及停用词等。...我们希望最终的结果是一个字符,其中每个词都用空格分割,就像这样: [1] "华山 海拔 不到 3000 米" 如何做到这点呢?另外,如何在数据集中批量对文本分词?Let's move on!...关于sapply函数的知识小伙伴们请课后学习,因为apply族函数的知识讲上一天一夜都讲不完,并且它又是R中最重要的函数系列。...大猫在下面放上自己在实际中使用的代码,其中会涉及到一些高阶的R编程知识,例如vapply函数,tryCatch函数等,小伙伴们可以课后思考学习哦。

    1.3K10

    R语言逻辑回归logistic模型分析泰坦尼克titanic数据集预测生还情况

    加载和预处理数据 现在我们需要检查缺失值,并使用sapply()函数查看每个变量有多少个唯一值,该函数将作为参数传递的函数应用于数据框的每一列。...在拟合广义线性模型时,R可以通过在拟合函数中设置一个参数来处理它们。 然而,我个人更喜欢 "手动"替换缺失值。有不同的方法可以做到这一点,一个典型的方法是用平均数、中位数或现有数值来替换缺失的数值。...因子是R处理分类变量的方式。我们可以使用以下几行代码来检查编码情况。 ? 为了更好地了解R是如何处理分类变量的,我们可以使用contrasts()函数。...,family=binomial(link='logit')) ##通过使用函数summary(),我们得到了我们模型的结果。 ?...测试集上0.84的准确度是一个相当不错的结果。然而,请记住,这个结果在一定程度上取决于我先前对数据的手动分割,因此,如果想得到一个更精确的分数,最好运行某种交叉验证,如k-fold交叉验证。

    2.6K10

    R语言中的批处理函数

    在R语言中,apply系列函数作为批量处理函数,可以循环遍历某个集合内的所有或部分元素,以简化操作。这些函数底层是通过C来实现的,所以效率也比手工遍历来的高效。...apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。...其中参数na.rm=TRUE,可以忽略所用的NA值 ? 2.lapply和sapply函数 lapply和sapply函数可以用于处理列表数据和向量数据(vector/list)。...lapply函数得到处理得到的数据类型是列表,而sapply函数得到处理的数据类型是向量。这两个函数除了在返回值类型不同外,其他方面基本完全一样。 ? ?...总结以上函数应用可以减少在R语言中的For循环,从而提升R语言效率。 欢迎各位学习交流

    2.7K20

    【学习】笨办法学R编程(二)

    任何一个合数都可以被几个质数所分解,这个性质很重要,我们将用它来解决Project Euler的第三个问题。还是和之前一样的,你需要自己在R控制台中敲打下面这些命令,根据结果自行揣摩其用处。...) sapply(X=r,FUN=myfunc) # Project Euler 3 # 找到600851475143这个数的最大质因子 # 先建立一个函数以判断某个数是否为质数 findprime...=0)) return(TRUE) else return(FALSE) } # 列出1到100的质数,看函数对不对 x = 1:100 x[sapply(x,findprime)] # 寻找最大的质因子...本例中除了使用for循环外,还见到了sapply函数,这是R语言中非常重要的一类向量化计算函数。求质数的方法可以参考这个文章,本例使用的是其中的境界4。...实际上根据质因子的性质,本例不一定非要建立判断质数的函数,不过这个函数我们在后面会用到的。另外如果你想用其它软件找这个数字的质因子,也可以看看这里。

    69390

    R编程之路_数据汇总(2)

    ) 4. [1] 0 0 0 MARGIN的长度可以不是1(多维应用),如果长度等于X的维数,应用到FUN函数的数据就只有一个值,结果没什么意义,甚至函数会获得无效值: 1. > apply(b,...2、lapply、sapply和vapply函数: 这几个函数是一套,前两个参数都为X和FUN,其他参数在R的函数帮助文档里有相信介绍。...$ShuXue 15. 50% 70% 90% 16.87.0 96.6 99.6 2.2 sapply返回的结果比较“友好”,如果结果很整齐,就会得到向量或矩阵或数组 sapply是simplify...vapply增加的FUN.VALUE参数可以直接对返回值类型进行检查,这样的好处是不仅运算速度快,而且程序运算更安全(因为结果可控)。...下面代码的rt.value变量设置返回值长度和类型,如果FUN函数获得的结果和rt.value设置的不一致(长度和类型)都会出错: 1. > probs <- c(1:3/4) 2. > rt.value

    59340
    领券