02.07.2013 Views

现代统计图形 - 科学网—博客

现代统计图形 - 科学网—博客

现代统计图形 - 科学网—博客

SHOW MORE
SHOW LESS

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*

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!