之前,我们讨论过可以使用 for 循环,在一个向量或列表上进行迭代,重复执行某个
表达式。但是在实践中,for 循环往往是最后的选择,因为每次迭代都是相互独立的,所
以我们可以使用更简洁更方便的读写方式来实现同样的效果。
举个例子,以下代码使用 for 循环创建了一个列表,它由 3 个相互独立、服从正态分
布的随机向量构成,其长度由向量 len 确定:
len <- c(3, 4, 5)
# 首先,在环境中创建一个列表
x <- list()
# 然后,使用 for 循环根据各自的长度生成相应的随机向量
for (i in 1:3) {
x[[i]] <- rnorm(len[i])
}
x
## [[1]]
## [1] 1.4572245 0.1434679 -0.4228897
##
## [[2]]
## [1] -1.4202269 -0.7162066 -1.6006179 -1.2985130
##
## [[3]]
## [1] -0.6318412 1.6784430 0.1155478 0.2905479 -0.7363817
这个例子很简单,但是代码有些冗长,如果使用 lapply( ):
lapply(len, rnorm)
## [[1]]
## [1] -0.3258354 -1.4658116 -0.1461097
##
## [[2]]
## [1] -0.1715198 0.5215857 -0.3178271 -0.3967798
##
## [[3]]
## [1] -0.2047106 -1.2009772 1.4859955 0.1940920 0.3758798
lapply 版本就非常简洁,它对 len 的每个元素调用 rnorm( ),并将结果放到一个列表中。
我们可能会想, R 是否允许将函数作为普通对象传递给参数呢?幸运的是,答案是肯
定的。在 R 中,函数就是对象,而且就像我们在数值方法部分展示的,函数可以作为参数
进行传递。这些特性极大地丰富了代码的灵活性。
apply 函数族中的每个函数都被称为高阶函数( higher-order function )。高阶函数是以
函数作为输入的函数。我们之后将详细讲解这些内容。

lapply

sapply

vapply

mapply

apply

使用 apply 函数族的更多相关文章

  1. R语言apply函数族笔记

    为什么用apply 因为我是一个程序员,所以在最初学习R的时候,当成“又一门编程语言”来学习,但是怎么学都觉得别扭.现在我的看法倾向于,R不是一种通用型的编程语言,而是一种统计领域的软件工具.因此,不 ...

  2. 【R.转载】apply函数族的使用方法

    为什么用apply 因为我是一个程序员,所以在最初学习R的时候,当成"又一门编程语言"来学习,但是怎么学都觉得别扭.现在我的看法倾向于,R不是一种通用型的编程语言,而是一种统计领域 ...

  3. 掌握R语言中的apply函数族(转)

    转自:http://blog.fens.me/r-apply/ 前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是 ...

  4. 数据操作-apply函数族

    R 作为一种向量化的编程语言,一大特征便是以向量计算替代了循环计算,使效率大大提升.apply函数族正是为解决数据循环处理问题而生的 -- 面向不同数据类型,生成不同返回值的包含8个相关函数的函数族. ...

  5. R中apply函数族

    参考于:http://blog.fens.me/r-apply/ 1. apply的家族函数 2. apply函数 apply函数是最常用的代替for循环的函数.apply函数可以对矩阵.数据框.数组 ...

  6. 【R笔记】apply函数族

      (1)    apply apply函数通过对数组,矩阵,或非空维数值的数据框的“边缘”(margin)即行或列运用函数.返回值为向量,数组或列表.   函数形式 apply(X, MARGIN, ...

  7. R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)

    R语言︱数据集分组 大型数据集通常是高度结构化的,结构使得我们可以按不同的方式分组,有时候我们需要关注单个组的数据片断,有时需要聚合不同组内的信息,并相互比较. 一.日期分组 1.关于时间的包都有很多 ...

  8. R语言中apply函数

    前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是为什么呢?原因在于R的循环操作for和while,都是基于R语言 ...

  9. R内存管理与垃圾清理

    1.内存查看 memory.limit():查看内存大小 memory.limit(n):申请内存大小 memory.size(NA):查看内存大小 memory.size(T):查看已分配的内存 m ...

随机推荐

  1. Oracle彻底删除11gR2 GI

    Oracle彻底删除11gR2 GI 环境:RHEL 6.5 + Oracle 11.2.0.4 GI 需求:在搭建Standby RAC时,安装GI软件期间由于GI安装遇到一些问题,root脚本执行 ...

  2. python直接赋值、浅拷贝和深拷贝

    # 解: # import copy # names1=['Amir','Barry','Cgakes','Dao',[11,22,33]] # names2=names1#直接赋值,指向同一个对象 ...

  3. location对象查询字符串参数

    虽然location.search可以返回从问号到URL末尾的所有内容,但却没有办法逐个访问其中的每个查询字符串参数.为此,可以创建下面这样一个函数,用以解析查询字符串,然后返回包含所有参数的一个对象 ...

  4. 025-du命令查看文件大小

    1.查看某个目录下面所有文件占用空间大小并排序.du -sh  目录 2.排序.sort -h

  5. mysql表结构文件

  6. linux常用命令:iconv 命令

    iconv命令是linux下用于文件转编码的常用命令,对于同时使用windows系统和linux系统的同学来说文件转编码也是经常遇到的操作. 1.命令格式: iconv [选项...] [文件...] ...

  7. 【百度统计】设置页面元素点击事件转化pv、uv

    html元素点击事件内添加代码:_hmt.push(['_trackEvent', category, action, opt_label, opt_value]); 1. '_trackEvent' ...

  8. java多线程----拒绝策略

    本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略介绍 ...

  9. Python 除法运算

    Python中的除法较其它语言显得非常高端,有套很复杂的规则.Python中的除法有两个运算符,/和// 首先来说/除法: 在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差 ...

  10. C++设计模式 之 “接口隔离” 模式:Facade、Proxy、Mediator、Adapter

    “接口隔离”模式 在组建构建过程中,某些接口之间之间的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案. 典型模式 #Facad ...