2019-07-23

Python011

2019-07-23,第1张

R语言中的apply函数

1、 lapply函数

lapply函数是一个最基础循环操作函数之一,用来对list、data.frame、vector(达不到理想效果,因为他会返回list)数据集进行循环,并返回和X长度同样的list结构作为结果集,通过lapply的开头的第一个字母 ' l ' 就可以判断返回结果集的类型。

定义:lapply(X, FUN, ...)     参数列表:X:list、data.frame数据;FUN: 自定义的调用函数;…: 更多参数,可选

例:lapply(temp,min)   temp是list,七列,每列5个元素。

sapply(temp,min)

2、sapply函数

sapply函数是一个简化版的lapply,sapply增加了2个参数simplify和USE.NAMES,返回值为向量。list or vector 

定义:sapply(X, FUN, ..., simplify=TRUE, USE.NAMES = TRUE)

参数列表:X:数组、矩阵、数据框;FUN: 自定义的调用函数;…: 更多参数,可选;simplify: 是否数组化;当值为"array"时,输出结果按数组进行分组;USE.NAMES: 如果X为字符串,TRUE设置字符串为数据名,FALSE不设置

3、vapply函数

vapply类似于sapply,提供了FUN.VALUE参数,用来控制返回值的行名,这样可以让程序更健壮。

定义:vapply(X, FUN, FUN.VALUE, ..., USE.NAMES = TRUE)

参数列表:X:数组、矩阵、数据框;FUN: 自定义的调用函数;

FUN.VALUE: 定义返回值的行名row.names,需要一个模板作为函数FUN的返回参数;

…: 更多参数,可选;USE.NAMES: 如果X为字符串,TRUE设置字符串为数据名,FALSE不设置

例如FUN.VALUE用法:

函数主体可以是一系列表达式,这些表达式需要用大括号括起来:function(param1,,paramN){expr1exprM}讨论函数的定义告诉R软件“用何种方式进行计算”。例如,R软件没有内置计算变异系数的函数,因此你可以定义函数如下:>cvcv(1:10)[1]0.5504819第一行定义了名为cv的函数,第二行引用该函数,以1∶10作为其参数x的值。函数对参数应用函数主体中的表达式sd(x)/mean(x)进行计算并返回结果。定义函数后,我们可以在任何需要函数的地方应用它,例如可以作为lapply函数的第二个参数(参见方法6.2):>cvlapply(lst,cv)函数主体如果包含多行表达式,则需要使用大括号来确定函数内容的起始和结束位置。下面这一函数采用了欧几里德算法计算两个整数的最大公约数:>gcdlapply(lst,function(x)sd(x)/mean(x))由于本书重点不在于介绍R的编程语言,这里不对R函数编程的细微之处进行解释。下面给出几个需要注意的地方:返回值所有函数都有一个返回值,即函数主体最后一个表达式值。你也可以通过return(expr)命令给出函数的返回值。值调用函数参数是“值调用”——如果你改变了函数中的参数值,改变只是局部的,并不会影响该参数所引用的变量值。局部变量你可以简单地通过赋值来创建一个局部变量,函数结束后该局部变量会消失。条件执行R语法中包含if语句,详情可以使用help(Control)命令查看。循环语句