当前位置: 首页 > news >正文

apply函数族

apply函数族

apply函数族是R语言中帮助用户实现高效的向量化运算的一系列函数,包括apply,lapply,sapply,vapply等。

apply()

apply函数以列或行为单位进行循环操作,可以处理matrix、array数据,返回一个向量或matrix。

apply(data,1/2,fuction)

apply函数有三个参数,第一个参数传入环境中已有的数据;第二个参数只能传入1或2,1代表按行处理,2代表按列处理;第三个参数传入一个函数,对数据进行相应的处理。

#求mtcars数据框中每一列的平均值
> apply(mtcars, 2, mean)mpg        cyl       disp         hp       drat         wt       qsec         vs         am       gear       carb 20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750   0.437500   0.406250   3.687500   2.812500

lapply()

lapply函数是list apply的缩写,处理list数据,返回一个list。因为列表来者不拒,什么数据都能放,所以lapply的应用场景较多。但是,用mean,sum等处理数值型数据的函数来处理list中的逻辑型、字符型数据是有问题的,返回NA。

lapply(data,fuction)

lapply函数有两个参数,第一个参数传入环境中已有的列表;第二个参数传入一个函数。

#新建一个列表,保存着mtcars数据集、字符型向量、整型向量三组数据
df_list <- list(data1=mtcars,data2=c('a','b','c'),data3=c(1:20)
)
#求列表中三组数据的最大值
> lapply(df_list,max)
$data1
[1] 472
$data2
[1] "c"
$data3
[1] 20
#求列表中三组数据的平均值
> lapply(df_list,mean)
$data1
[1] NA
$data2
[1] NA
$data3
[1] 10.5
Warning messages:
1: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA
2: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA

sapply()

sapply函数是对lapply处理结果的向量化保存,处理list数据,返回一个向量。

sapply(data,fuction)

sapply函数有两个参数,第一个参数传入环境中已有的列表;第二个参数传入一个函数。

> sapply(df_list, max)
data1 data2 data3 
"472"   "c"  "20" 
> sapply(df_list, mean)
data1 data2 data3 NA    NA  10.5 
Warning messages:
1: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA
2: In mean.default(X[[i]], ...) : 参数不是数值也不是逻辑值:回覆NA

sapply函数还有一个参数simplify,默认值为TRUE,设置为FALSE的话跟lapply的结果就完全一样了,这样看来,lappy和sapply记住一个sapply就好了。

> sapply(df_list, max,simplify = FALSE)
$data1
[1] 472
$data2
[1] "c"
$data3
[1] 20

除了上述三个函数,apply函数族中还有vapply、mapply等函数,不过这三个函数在绝大多数应用场景中应该够用了,按行或列处理数组时用apply,处理list时用sapply,其他的需要的时候再看了。

详细见下表:

函数用法输入输出语法
apply对阵列行或者列使用函数ArrayArray/Listapply(X, MARGIN, FUN, …)
lapply对列表或者向量使用函数List/expressionListlapply(X, FUN, …)
sapply对列表或者向量使用函数List/expressionList/Arraysapply(X, FUN, …, simplify = TRUE, USE.NAMES = TRUE)
vapply对列表或者向量使用函数List/expressionArrayvapply(X, FUN, FUN.VALUE, …, USE.NAMES = TRUE)
tapply对不规则阵列使用函数ArrayArray/Listtapply(X, INDEX, FUN = NULL, …, simplify = TRUE)
eapply对环境中的值使用函数Values in an EnvironmentListeapply(env, FUN, …, all.names = FALSE, USE.NAMES = TRUE)
mapply对多个列表或者向量参数使用函数List/ArrayList/Arraymapply(FUN, …, MoreArgs = NULL, SIMPLIFY = TRUE, USE.NAMES = TRUE)
rapply运用函数递归产生列表ListList/Vectorrapply(object, f, classes = “ANY”, deflt = NULL,how = c(“unlist”, “replace”, “list”), …)
http://www.lryc.cn/news/16628.html

相关文章:

  • 读书笔记可读性素材
  • 【C++】vector 模拟实现
  • canvas初体验
  • JavaWeb12-线程通讯(线程等待和唤醒)
  • 江苏专转本如何事半功倍的备考
  • linux下安装mongoDB
  • 掌握MySQL分库分表(七)广播表、绑定表实战,水平分库+分表实现及之后的查询和删除操作
  • 企业为什么需要数据可视化报表
  • 5个有效的华为(HUAWEI)手机数据恢复方法
  • 【Java并发编程】线程安全(一)Synchronized原理
  • [apollo]vue3.x中apollo的使用
  • system()函数启用新进程占有原进程的文件描述符表的问题
  • nignx(安装,正反代理,安装tomcat设置反向代理,ip透传)
  • sklearn模块常用内容解析笔记
  • 我的 System Verilog 学习记录(2)
  • 【调研报告】Monorepo 和 Multirepo 的风格对比及使用示例
  • Retrofit源码分析
  • Mybatis-Plus入门系列(20) -兼容多种数据库
  • JetPack板块—Android X解析
  • C++学习笔记-数字
  • Nginx——Nginx的基础原理
  • 服务端开发Java之备战秋招面试篇1
  • 【C++的OpenCV】第三课-OpenCV图像加载和显示
  • 【面试1v1实景模拟】Spring事务 一文到底
  • Neuron Selectivity Transfer 原理与代码解析
  • vue项目关闭子页面,并更新父页面的数据
  • 第五次作业:修改redis的配置文件使得windows的图形界面客户端可以连接redis服务器
  • 【11】FreeRTOS的延时函数
  • Vue页面组成及常用属性
  • j6-IO流泛型集合多线程注解反射Socket