R语言中dim函数_R语言--向量化计算(apply族函数)

61ec11791641ff5d0f52ffdae3e83048.png
R语言最优秀的是它的向量化编程,这其中apply族函数扮演了非常重要的角色。apply族函数是由apply、sapply、lapply、mapply、tapply等函数组成的。熟练使用apply族函数,能够简化程序,提高代码的运算速度。

软件&环境

  • win10 64bit
  • R 3.6.1

apply

apply是最基本的函数。为了方便演示,选取了R自带的数据框mtcars的前4行和前5列,并赋值给data。a1返回的结果是data数据每一行的和,由于每行都有一个和,所以a1是4个元素组成的数值向量。a2返回的结果是data数据每一列的均值,同样,a2是5个元素组成的数值向量。

# 获取内置数据
data <- mtcars[1:4,1:5]
print(data)
##                 mpg cyl disp  hp drat
## Mazda RX4      21.0   6  160 110 3.90
## Mazda RX4 Wag  21.0   6  160 110 3.90
## Datsun 710     22.8   4  108  93 3.85
## Hornet 4 Drive 21.4   6  258 110 3.08
# 对数据框每行求和
a1 <- apply(data,1,sum)
print(a1)
##      Mazda RX4  Mazda RX4 Wag     Datsun 710 Hornet 4 Drive 
##         300.90         300.90         231.65         398.48
# 对数据框每列求均值
a2 <- apply(data,2,mean)
print(a2)
##      mpg      cyl     disp       hp     drat 
##  21.5500   5.5000 171.5000 105.7500   3.6825

apply函数的第一个参数表示数据,第二个参数表示维度(1表示行,2表示列),第三个参数表示在维度上操作的函数。需要注意的是第三个参数,用作演示的函数是R自带的函数(sum、mean),当然,这里也可以是自己定义的函数。

# 自定义函数(求极差)
func <- function(x){result <- diff(range(x))return(result)
}
# 对数据框每列求极差
a3 <- apply(data,2,func)
print(a3)
##    mpg    cyl   disp     hp   drat 
##   1.80   2.00 150.00  17.00   0.82

sapply

sapply的用法比apply要更灵活一些,同样,用data做演示。计算数据框data每列的数据范围,用sapply进行计算,返回的结果存储在s1里,sapply第一个参数是需要计算的数据框,第二个参数是函数,第三个参数simplify=T(默认)代表返回的结果简化表示,s1的数据格式为矩阵。

s1 <- sapply(data,range,simplify = T)
class(s1)
## [1] "matrix"

如果不想让计算的结果自动合并成矩阵,可以设置simplify=F,将返回一个列表,列表的每个组件包含了data数据框每列的range函数计算结果。

s2 <- sapply(data,range,simplify = F)
class(s2)
## [1] "list"

sapply一个更常见的用法是针对列表的组件进行操作。例如有n个数据框,对每个数据框都要进行相同的操作,常规方法用循环遍历,但操作体验差,速度慢,更优的解决方案是:先对单个数据框定义处理函数,然后用sapply对所有数据框采取相同操作

# 定义一个数据框组成的list
df_list <- list(a=mtcars[1:3,1:4],b=airquality[1:3,1:4],c=iris[1:3,1:4])
# 自定义函数(求数据框欧氏距离的最大值)
max_func <- function(x){d <- dist(x,p=2)return(max(d))
}
# sapply对每个数据框计算
s3 <- sapply(df_list,max_func)
print(s3)
##          a          b          c 
## 54.7744466 72.3488770  0.5385165

lapply

lapply的用法与sapply基本相同,只不过返回的结果是以list储存的。

# 求每一列的均值
l1 <- lapply(data,mean) 
print(l1)
## $mpg
## [1] 21.55
## 
## $cyl
## [1] 5.5
## 
## $disp
## [1] 171.5
## 
## $hp
## [1] 105.75
## 
## $drat
## [1] 3.6825
class(l1)
## [1] "list"

mapply

mapply在sapply和lapply的基础上进行了拓展,可以应用在多个变量上。a、b、c三个数值向量,第一次需要计算1*2*3,第二次需要计算2*3*4,...,以此类推。当需要每次变化的变量有多个时,用mapply计算更方便快捷。

a <- 1:5
b <- 2:6
c <- 3:7
m1 <- mapply(prod,a,b,c)
print(m1)
## [1]   6  24  60 120 210

tapply

tapply主要用在分组计算上。分组计算是常见的数据处理操作,能够处理分组计算的函数也不少,tapply的优势是简单便捷。

# 数据框
group_df <- data.frame(value=1:6,label=rep(c("a","b"),3,each=1))
print(group_df)
##   value label
## 1     1     a
## 2     2     b
## 3     3     a
## 4     4     b
## 5     5     a
## 6     6     b
# 按照label分组计算value和
t1 <- tapply(X =group_df$value,INDEX = group_df$label,sum)
print(t1)
##  a  b 
##  9 12

http://weixin.qq.com/r/mShLU4rECNd3rc4w932L (二维码自动识别)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php+mysql记事本_一个简单记事本php操作mysql辅助类创建

//SqlHelper.class.phpconnmysql_connect($this->host,$this->user,$this->passwrd); if(!$this->conn){ die("连接失败".mysql_error()); } mysql_select_db($this->db); mysql_query("set names utf8"); } //增删改 function execute_dml…

python init方法做了什么_Python类方法、__new__方法和__init__方法分别是什么

Python类方法、__new__方法和__init__方法分别是什么发布时间&#xff1a;2020-09-03 15:24:06来源&#xff1a;亿速云阅读&#xff1a;104作者&#xff1a;小新这篇文章主要介绍Python类方法、__new__方法和__init__方法分别是什么&#xff0c;文中介绍的非常详细&#xff0c;…

谷歌浏览器中文版_中国科学家设计超薄指尖传感器,厚度不到A4纸五分之一 / 谷歌发布地图时光机:百年前,你家街道啥样?/ AI看图说话首超人类...

关注我们了解计算机视觉最新动态 &#xff01;动态先览1中国科学家设计超薄指尖传感器&#xff0c;厚度不到A4纸五分之一2谷歌发布地图「时光机」&#xff1a;100年前&#xff0c;你家街道长啥样&#xff1f;3仿真环境跟车2分钟&#xff0c;就让自动驾驶系统撞上马路牙子&#…

300小时成为java程序员_直击面试现场: Java程序员3轮6小时面试, 成功拿到阿里offer!...

原标题&#xff1a;直击面试现场: Java程序员3轮6小时面试, 成功拿到阿里offer!今天给大家分享一位Java程序员小伙去阿里应聘的经历&#xff01;从Java开发要掌握的技术来讲&#xff0c;前面已经说得差不多了。我主要想从面试者的角度谈一谈看法。如果是我面试&#xff0c;就给…

python 判断每月最后一天_python获取某年中每个月的第一天和最后一天的两种方法...

搜索关键字&#xff1a;python get every first day of month参考解答&#xff1a;方法一&#xff1a;>>> import calendar>>> calendar.monthrange(2002,1)(1, 31)>>> calendar.monthrange(2008,2)(4, 29)>>> calendar.monthrange(2100,2…

anaconda python3.8目录_MacBook Pro 安装anaconda、配置环境

新入手了MacBook Pro&#xff0c;iOS系统还不算非常熟练...作为一个新手程序员&#xff0c;在python开发道路上的学习就从安装环境开始吧&#xff1a;1、下载安装包2、安装过程一路同意or继续...不过&#xff0c;mac上弹出不允许在当前路径安装&#xff0c;那么选择自定义安装路…

中国网建java发送短信_短信验证登陆-中国网建提供的SMS短信平台

一、JAVA发送手机短信常见的有三种方式(如下所列)&#xff1a;使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备。二、一下整理了SMS短信验证过程…

stm32外部中断_STM32学习笔记 | 电源管理及低功耗设计要点

一款好的电子产品&#xff0c;都需要认真考虑电源管理的问题&#xff0c;电池供电的产品更应该注意低功耗的实现。 STM32电源介绍嵌入式开发直播课 - STM32 USART串口的应用 - 创客学院直播室​www.makeru.com.cn每一块STM32芯片中都有一个电源控制器&#xff08;PWR&#xff0…

delphi 调用浏览器内核_HFL:基于混合模糊测试的Linux内核漏洞挖掘

RemarksConference: NDSS 2020Full Paper: HFL: Hybrid Fuzzing on the Linux KernelSummary针对的问题&#xff1a; Linux 操作系统内核安全漏洞的发现需要新技术。现有解决方案的不足&#xff1a;当前的模糊测试技术难以直接应用于内核安全漏洞发现。提出的创新方案概述&…

隔行变色java代码_jquery入门—选择器实现隔行变色实例代码

1、JQuery选择器继承了CSS、path语音的部分语法&#xff0c;允许通过标签名、属性名、内容对DOM元素进行快速、准确的选择。2、JQuery选择器与JavaScript相比&#xff0c;具有代码简单、完善的检测机制的优势。3、使用JQuery选择器实现隔行变色&#xff0c;示例代码如下&#x…

python arduino c_从Python向Arduino LCD发送一个字符串

我想用python在arduinolcd16x2上显示一个字符串&#xff0c;但是我遇到了串行通信的问题。在以下是Arduino中运行的代码&#xff1a;Arduino代码#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7);String stringa;const unsigned long TimeOut 10; // timeout 10 msString string…

如何实现软件的远程更新_手机免root终于也能实现远程控制了 这款国产软件真是越来越好用...

说到远程控制&#xff0c;大家或许可以说出好几个应用软件出来&#xff0c;比如Teamviewer、Anydesk、向日葵等等。其实&#xff0c;这些软件我都用过&#xff0c;但Teamviewer现在对个人用户经常宕机&#xff0c;Anydesk的功能又不够丰富&#xff0c;只有一个向日葵远程控制是…

角标越界 Java_【新人求助】利用占位符操作数据库是总是提示数组角标越界是怎么回事 - Java论坛 - 51CTO技术论坛_中国领先的IT技术社区...

用占位符和数组来操作数据库总是提示下角标越界&#xff0c;找了半天也没弄明白哪里有问题&#xff0c;这个地方是跟着云课堂老师的讲解做的&#xff0c;只不过操作的数据表不一样&#xff0c;但是老师那个就没问题&#xff0c;我就出了问题&#xff0c;如果有大神能帮忙看看&a…

简述ospf的工作原理_现代数字存储示波器的工作原理简述

示波器是一种用途十分广泛的电子测量仪器。俗话说&#xff0c;电是看不见摸不着的。但是示波器可以帮我们“看见”电信号&#xff0c;便于人们研究各种电现象的变化过程。所以示波器的核心功能&#xff0c;就和他的名字一样&#xff0c;是显示电信号波形的仪器&#xff0c;以供…

pyecharts 间距_高月双色球20108期:红球首尾间距参考29区段

双色球第2020108期奖号为&#xff1a;03 09 11 24 25 28 16&#xff0c;红球和值&#xff1a;100&#xff0c;重号2个&#xff1a;11 28&#xff0c;首尾间距&#xff1a;25。和值&#xff1a;上期和值为100&#xff0c;上升了22点&#xff0c;再次开出小和值&#xff0c;最近…

java类中声明log对象_用于Android环境,java环境的log打印,可打印任何类型数据

LogXixi用于Android环境&#xff0c;java环境的log打印&#xff0c;可打印任何类型数据,根据android项目环境debug环境自动打开&#xff0c;release环境自动关闭android环境log打印&#xff0c;规范bean对象&#xff0c;json&#xff0c;xml对应log&#xff0c;crash捕捉&#…

xbox手柄接收器驱动_xbox手柄连接 win10电脑

xbox手柄 连接win10笔记本 分为三种连接方式&#xff1a;有线蓝牙无线适配器首先说明一下连接方式的特点然后说明连接方式第一种&#xff1a;有线连接 手柄直接通过micro USB数据线和win10电脑连接。这一步最简单&#xff0c;一般电脑会自动安装驱动&#xff0c;连接之后可以使…

单片机复位后为什么要对sp重新赋值_51单片机系列之2点亮第一个led小灯

点亮led灯简单的理解就是要求阳极高电平阴极低电平。接下来我们去看看单片机的原理图&#xff0c;找到led 模块。如图可以看到led的阳极是连接的VCC(电源高电平)阴极连接的接口是单片机的I/O口P20到P27.要想led点亮只需控制单片机I/O口输出低电平即可(单片机I/O口默认高电平)。…

db2与mysql编目_DB2编目、联邦数据库 - Goopand's OS Space - OSCHINA - 中文开源技术交流社区...

一、两个数据库在不同的服务器上[环境描述]10.0.0.10&#xff1a;库名为 db_1010.0.0.17&#xff1a;库名为 db_17[需求描述]在db_17库中&#xff0c;跨库查询db_10库的表[操作步骤]1)在10.0.0.17数据库服务器&#xff0c;开启联邦支持db2 "update dbm cfg using federate…

关机时无人照管更新正在运行_无法抗拒的未来:无人叉车在内部物流中已成为现实...

自动化和半自动化的叉车不再是新奇的东西&#xff0c;在人力短缺的仓库中取得了进展。他们最终会成为规范吗?目前尚不知道全世界有多少辆无人驾驶叉车(也称为自动叉车、机器人叉车或者AGV)售出。但是叉车生产商都显示出&#xff0c;它在该领域的迅速增长。重要的是&#xff0c…