R语言 | 认识apply家族

news/2024/12/5 5:38:10/

目录

一、apply()函数

二、sapply()函数

三、lapply()函数

四、tapply()函数

​五、iris鸢尾花数据集


R语言提供了一个循环系统称apply家族,它具有类似for循环的功能,但是若想处理相同问题,apply家族函数好用太多了。

一、apply()函数

apply()函数主要功能是将所设定的函数应用到指定对象的每一行或列。它的基本使用格式如下:

apply(x,MARGIN,RUN,...)

x:要处理的对象,可以是矩阵、N维数组、数据框。

MARGIN:如果是矩阵则值为1或2,1代表每一行,2代表每一列。

FUN:要使用的函数。

...:FUN函数所需的额外参数。

二、sapply()函数

apply()函数尽管好用,但主要是用在矩阵、N为数组、数据框,若是面对向量,列表呢?此时可以使用sapply()(注:数据框数据也可用),此函数开头是s,是simplify的缩写,表示会对执行结果的对象进行简化。sapply()函数的使用格式如下:

sapply(x,FUN,...)

 x:要处理的对象,可以是向量、数据框或列表。

FUN:要使用的函数。

...:FUN函数所需的额外参数。

sapply这个函数所返回的数据必要时皆会被简化,简化原则如下:
1.如果处理完列表、数据框或向量后,返回是一个数字,则返回结果会被简化为向量

2.如果处理完列表、数据框后,返回的向量有相同的长度,则返回结果会被简化为矩阵

3.如果是其他状况则返回是列表。 

三、lapply()函数

lapply()函数的使用方法与sapply()函数几乎相同,但是lapply()函数的首字母l是list的缩写,表示lapply()函数所传回的是列表。lapply()函数的使用格式如下:

lapply(x,FUN,...)

x:可以是向量、数据框和列表。

FUN:预计使用的函数。

...:FUN函数所需的额外参数。

如果我们在sapply()函数内增加参数“simplify”,同时将它设为FALSE,则会获得与lapply()函数相同的返回结果。

 

四、tapply()函数

tapply()函数主要是用于一个因子或因子列表,执行指定的函数,最后获得汇总信息。

tapply()函数的使用格式如下:

tapply(x,INDEX,FUN,...)

x:是要处理的对象,通常是向量变量,也可是其他数据类型的数据。

INDEX:因子或分类的字符串向量或因子列表。

FUN:要使用的函数。

...:FUN函数所需的额外参数。

 下面使用R语言内建的数据state.region,计算美国4大区包含的各州的数量。

使用R语言内建的数据state.region和state.x77,计算美国4大区百姓的平均收入。

 

 五、iris鸢尾花数据集

iris中文是鸢尾花,这是系统内建的数据框数据集,内含150个记录,如下:

下面是前6个记录:

 下面使用lapply()函数列出iris数据集的元素类型:

上述实例返回列表数据,而sapply()函数可以简化传回数据:

下面计算每字段的平均值:

上述实例虽然计算出来各字段的平均值,但出现了Warning message,主要是因为“Species”字段内容是因子,不是数值,为了解决这个问题,可以在sapply()函数内设计一个函数判别各字段是否是数值,如果不是则传回NA。

特别留意iris数据集的Species字段的数据是因子类型,所以可以使用tapply()函数执行各类数据运算。

 


http://www.ppmy.cn/news/64417.html

相关文章

神奇,声网Web SDK还能这么实现直播中美颜功能

前言 本篇文章是通过使用声网Web SDK来实现直播中美颜效果的深度体验文章,其中发现了屏幕共享并本地合图多个视频、图片,声网美颜插件等功能特性十分强大和专业,特为此做一个技术体验的分享,毕竟好技术就是要去传播的。 随着音视…

JackSon的ObjectNode和JsonNode

JackSon的ObjectNode和JsonNode 想要代替FastJson的JsonObect,需要用到ObjectNode和JsonNode 最核心的就是: JsonNode是一个抽象类,不能实例化,它不能put新节点进去(节点就是jsonobject存储的一对kv)Object…

【团购-自定义Cell完善 Objective-C语言】

一、我们刚才这么写,有一个问题, 1.CZGoodsCell *cell = [[NSBundle mainBundle] loadNibNamed:@“CZGoodsCell” owner : nil options : nil ] ; 这样是不是没有进行单元格重用啊, 没有重用单元格, 我们说,前面还有一个对单元格进行重用吧, static NSString *ID = @“…

golang汇编之控制流(五)

程序执行的流程主要有顺序、分支和循环几种执行流程。本节主要讨论如何将Go语言的控制流比较直观地转译为汇编程序,或者说如何以汇编思维来编写Go语言代码。 顺序执行 顺序执行是我们比较熟悉的工作模式,类似俗称流水账编程。所有不含分支、循环和goto…

通过栈/队列/优先级队列/了解容器适配器,仿函数和反向迭代器

文章目录 一.stack二.queue三.deque(双端队列)四.优先级队列优先级队列中的仿函数手搓优先级队列 五.反向迭代器手搓反向迭代器 vector和list我们称为容器,而stack和queue却被称为容器适配器。 这和它们第二个模板参数有关系,可以…

csgo搬砖项目,时间自由,项目包下车,包落地

Steam是一款全球较大的综合性数字游戏软件发行平台。steam同时在线飙到3300万!超越你说熟悉的王者,吃鸡!用户多,竞争者少,连我自己都没想到,有一天我居然可以靠着steam游戏搬砖来赚钱养活自己。 实话实说&a…

【分布族谱】Zipf分布及其Python可视化

文章目录 zipf分布简介zipfian和zipf对象zipf分布到zeta分布的变化情况分布族谱图 zipf分布简介 #mermaid-svg-mG901pJXpTYFT7Bk {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-mG901pJXpTYFT7Bk .error-icon{fill:…

一文带你搞清 ChatGPT 与 Azure OpenAI 的区别

这两周是我从2017年开始全职涉入 NLP 领域后最忙的两周,无数的同事和客户都在向我提出一个询问:ChatGPT 可以帮到我们什么? 特别是在2023年3月31日我做了一场微软 Azure OpenAI [布局助力企业]拥抱新智能时代的演讲之后,这几天我…