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 (二维码自动识别)

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

  1. r语言中mpg数据_R语言数据筛选整理包dplyr

    dplyr软件包是R中功能最强大,最受欢迎的软件包之一.该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等.本文包括一些示例和如何 ...

  2. r语言中mpg数据_R语言数据实战 | 统计检验

    原标题:R语言数据实战 | 统计检验 1.单个总体均值的t检验 1. 什么是检验? 检验(test)是统计学中最重要的概念之一,在科学研究和实际业务中都有着广泛的应用.用一句话来概括就是:人们希望通过 ...

  3. r语言中mpg数据_R语言常用的数据处理的包(1)

    在R中有很多的内置函数,比如transform().rbind().cbind()等函数,这些函数我们可以直接使用,除此之外,还有常见的几种包在处理数据的时候非常好用. dplyr包 dplyr包是H ...

  4. r语言中mpg数据_R语言数据分析系列之五

    R语言数据分析系列之五 本节来讨论一下R语言的基本图形展示,先来看一张效果图吧. 这是一张用R语言生成的,虚拟的wordcloud云图,详细实现细节请參见我的github项目:https://gith ...

  5. R语言中dim函数_R语言 常见函数知识点梳理与解析 | 精选分析

    目 录 1.str() 显示数据集和变量类型,并简要展示数据集情况 2.subset()  取子集 3.which.min(), which.max()和which() 4.pmin( )/ pmax ...

  6. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  7. c语言中alloc作用,C语言内存分配 :malloc()函数与alloc()函数

    C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变 ...

  8. R语言中dim函数_R语言中的方差分析方法汇总

    方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法.下面我总结一下R语言如何对常用的方差分析进行操作. 1. 方差分析的假定 上面这个思维导图,也可以看出,方差分析有三大假定:正态, ...

  9. 1071svm函数 r语言_如何利用R语言中的rpart函数建立决策树模型

    决策树是根据若干输入变量的值构造出一个适合的模型,以此来预测输出变量的值,并用树形结构展示出来.决策树主要有两个类别:分类树和回归树.分类树主要针对离散的目标变量,回归树则针对连续的目标变量.R语言中 ...

最新文章

  1. UVa1450 Airport(二分法)
  2. selenium之 chromedriver与chrome版本映射表(更新至v2.33)
  3. 曾经案例中问题 与 工厂模式解耦
  4. 数据挖掘流程(二):数据预处理
  5. Linux基础(day59)
  6. golang如何打印float64的整数部分_2020-08-10:如何不用加减乘除求浮点数的2倍值?...
  7. Gym - 100851F Froggy Ford kruskal
  8. 《日志管理与分析权威指南》一2.3 良好日志记录的标准
  9. 台阶问题(洛谷-P1192)
  10. sqlserver中日期保存及取值
  11. 最好用的mysql密码忘记的解决方法
  12. Android打砖块课程设计报告,c+课程设计打砖块游戏0_毕业论文
  13. 曾经的那些绝世电脑高手们
  14. Node.js 教程第五篇——request
  15. EditPlus 3设置字体大小
  16. windows xp sp2的产品密钥
  17. pwnable.kr - passcode
  18. autorun.vbs病毒的清除办法
  19. 【url传参】之 获取url?后面的参数,对应参数名获取值 和 全量获取转换为对象结构两种方式
  20. (实测可用)STM32L431RCT6开发板-实验2 看门狗IWDG实验

热门文章

  1. js提交java后台,双引号转义为quot;解决办法……StringEscapeUtils.unescapeHtml4完美解决
  2. 计算机专业直接工作简历,2017计算机专业工作简历
  3. saas java框架_XMReport-提供web项目Java套打解决方案
  4. datagrid如何获取一行数据中的某个字段值_SQL中常见的面试题
  5. Python __name__ == ‘__main__’详细解释-Python零基础入门教程
  6. c++两个数组对比去掉重复的元素_LeetCode 题解 | 167.两数之和 II 输入有序数组...
  7. 娄底八中的初中计算机考试,众人同心勤耕耘 敢叫日月换新天
  8. vivoy9s怎么设置返回键_vivoy9s怎么设置返回键 可以使用虚拟导航键
  9. 两条直线求交点c语言,C§ 3.3.1两条直线的交点坐标(5页)-原创力文档
  10. java map removeall_Java删除Map中元素