vapply
尽管 sapply 非常方便和智能,但有时智能可能隐藏着风险。假如我们有一个数字列表:
x <- list(c(1, 2), c(2, 3), c(1, 3))
如果我们想得到一个向量,其中每个元素都是 x 中对应数字的平方。那么,sapply( )
就比较方便易用,因为它会自动尝试简化结果的数据结构:
sapply(x, function(x) x ^ 2)
## [,1] [,2] [,3]
## [1,] 1 4 1
## [2,] 4 9 9
然而,如果输入数据有错误或损坏,sapply( )会默默地接收输入,但可能返回一个
意想不到的结果。例如,假设 x 的第 3 个成分误加了一个额外元素:
x1 <- list(c(1, 2), c(2, 3), c(1, 3, 3))
此时,再调用 sapply( ),它会发现无法将结果简化成矩阵,所以就返回了一个列表:
sapply(x1, function(x) x ^ 2)
## [[1]]
## [1] 1 4
##
## [[2]]
## [1] 4 9
##
## [[3]]
## [1] 1 9 9
如果我们最初使用 vapply( ),错误很快就能被发现。vapply( )函数通过一个附
加参数来设定每次迭代返回值的模板。下面这段代码,指定模板为 numeric(2),意味着
每次迭代都返回一个包含 2 个元素的数值向量。如果不能按照既定模板进行输出,函数就
会终止,并产生错误信息:
vapply(x1, function(x) x ^ 2, numeric(2))
## Error in vapply(x1, function(x) x^2, numeric(2)): 值的长度必需为 2,
## 但 FUN(X[[3]])结果的长度却是 3
对于最初正确的输入,vapply( )返回与 sapply( )完全相同的矩阵:
vapply(x, function(x) x ^ 2, numeric(2))
## [,1] [,2] [,3]
## [1,] 1 4 1
## [2,] 4 9 9
总之,vapply( )是 sapply( )的安全升级版,因为它可以执行模板核查。在实践
中,如果可以事先确定输出模板,最好使用 vapply( )而不是 sapply( )。
vapply的更多相关文章
- R语言 apply,sapply,lapply,tapply,vapply, mapply的用法
apply() apply(m,dimcode,f,fargs) m 是一个矩阵. dimcode是维度编号,取1则为对行应用函数,取2则为对列运用函数. f是函数 fargs是f的可选参数集 > ...
- R语言学习笔记(四):apply,sapply,lapply,tapply,vapply以及mapply的用法
apply() apply(m,dimcode,f,fargs) m 是一个矩阵. dimcode是维度编号,取1则为对行应用函数,取2则为对列运用函数. f是函数 fargs是f的可选参数集 > ...
- (2)apply函数及其源码
本文原创,转载请注明出处,本人Q1273314690(交流学习) 总结: 就是MARGIN决定了你的FUN调用几次,每次传递给你的是什么维度的内容,而...是传递给FUN的(每次调用的时候都会被传 ...
- R语言apply函数族笔记
为什么用apply 因为我是一个程序员,所以在最初学习R的时候,当成“又一门编程语言”来学习,但是怎么学都觉得别扭.现在我的看法倾向于,R不是一种通用型的编程语言,而是一种统计领域的软件工具.因此,不 ...
- 【R.转载】apply函数族的使用方法
为什么用apply 因为我是一个程序员,所以在最初学习R的时候,当成"又一门编程语言"来学习,但是怎么学都觉得别扭.现在我的看法倾向于,R不是一种通用型的编程语言,而是一种统计领域 ...
- R的变量类型和常用函数
一.R的变量类型 也可以说是数据存储方式,有: Vector: 一维阵列 Matrics: 二维阵列,其中所有元素是同一数据类型. factor: 种类变量,可使用levels函数来规定种类变量的各级 ...
- Managing Spark data handles in R
When working with big data with R (say, using Spark and sparklyr) we have found it very convenient t ...
- Principal Components Regression, Pt.1: The Standard Method
In this note, we discuss principal components regression and some of the issues with it: The need fo ...
- R语言︱数据分组统计函数族——apply族用法与心得
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:apply族功能强大,实用,可以代替 ...
随机推荐
- 扫描二维码的实现(barcode) ---- HTML5+
模块:barcode Barcode模块管理条码扫描,提供常见的条码(二维码及一维码)的扫描识别功能,可调用设备的摄像头对条码图片扫描进行数据输入.通过plus.barcode可获取条码码管理对象. ...
- Comparable 与 Comparator的区别
Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...
- 在github上参与开源项目日常流程
转载自:http://blog.csdn.net/five3/article/details/9307041 1. 注册帐号 打开https://github.com/,填写注册信息并提交. 2. 登 ...
- c# devExpress控件 comboBoxEdit,gridControl1,labelcontrol
一.comboBoxEdit:下拉框 属性 添加项:Properties->items 二.gridControl gridControl与Gridview的区别:前者是容器,后者为视图 2)g ...
- Centos6与Centos7的区别
前言 centos7与6之间最大的差别就是初始化技术的不同,7采用的初始化技术是Systemd,并行的运行方式,除了这一点之外,服务启动.开机启动文件.网络命令方面等等,都说6有所不同.让我们先来了解 ...
- SpringBoot项目属性配置
如果使用IDEA创建Springboot项目,默认会在resource目录下创建application.properties文件,在SpringBoot项目中,也可以使用yml类型的配置文件代替pro ...
- Introduction to Structured Data json的2种形式 JAVA解析JSON数据 - JsonArray JsonObject
https://developers.google.com/search/docs/guides/intro-structured-data Structured data refers to kin ...
- SprinBoot CLI 安装(Mac版)
1. 安装 HomeBrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/instal ...
- centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课
centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课 rsync可以增量同步,scp不行 ...
- centos 目录文件管理 mkdir,rm,touch,误删文件extundelete,cp,mv,cat,more,less ,head,tail,chown,chmod ,umask 第四节课
centos 目录文件管理 mkdir,rm,touch,误删文件extundelete,cp,mv,cat,more,less ,head,tail,chown,chmod ,umask 第四节课 ...