现代统计图形 - 科学网—博客
现代统计图形 - 科学网—博客
现代统计图形 - 科学网—博客
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
158 附录 A 程序初步<br />
A.1.5 函数<br />
R中也可以自定义函数,以便编程中可以以不同的参数值重复使用一<br />
段代码。定义函数的方式为:function(arglist) expr return(value);<br />
其中arglist是参数列表,expr是函数的主体,return()用来返回函数值。例如<br />
我们定义一个求峰度 n<br />
i=1 (xi − ¯x) 4 /(n · Var(x)) − 3的函数kurtosis()如下:<br />
1 > kurtosis = function(x, na.rm = FALSE) {<br />
2 + # 去掉缺失值<br />
3 + if (na.rm)<br />
4 + x = x[!is.na(x)]<br />
5 + return(sum((x - mean(x))^4)/(length(x) * var(x)^2) -<br />
6 + 3)<br />
7 + }<br />
该函数有两个参数,数据向量x和是否删除缺失值na.rm,后者有默认<br />
值FALSE;下面我们用均匀分布的随机数测试一下:<br />
1 > # 理论上均匀分布的峰度应该小于1,以下为一个模拟结果<br />
2 > kurtosis(runif(100))<br />
[1] -0.911<br />
注意,R中有时候不必用函数return()指定返回值,默认情况下,函数<br />
主体的最后一行即为函数返回值。<br />
最后,因为本书的很多作图函数都是泛型函数,我们也补充一点泛型<br />
函数(generic function)的作用原理。实际上泛型函数是根据第一个参数<br />
的类(class)去调用了相应的“子函数”。以plot()为例,我们用methods()查<br />
看一下它有哪些作图方法:<br />
1 > methods("plot")<br />
[1] plot.Date* plot.HoltWinters*<br />
[3] plot.POSIXct* plot.POSIXlt*<br />
[5] plot.TukeyHSD plot.aareg*<br />
[7] plot.acf* plot.correspondence*<br />
[9] plot.cox.zph* plot.data.frame*<br />
[11] plot.decomposed.ts* plot.default<br />
[13] plot.dendrogram* plot.density<br />
[15] plot.ecdf plot.factor*<br />
[17] plot.formula* plot.hclust*<br />
[19] plot.histogram* plot.isoreg*