《统计建模与R软件》薛毅
第2章 R软件的使用
2.9 编写自己的函数
函数定义的格式如下:
> name <- function(arg_1, arg_2, ...) expression
expression是R语言中的表达式(通常是一组表达式),arg_1, arg_2, … 表示函数的参数;表达式中,放在程序最后的信息是函数的返回值,返回值可以是向量、数组(矩阵)、列表或数据框。
调用函数的格式为name(arg_1, arg_2, …),并且在任何时候调用都是合法的
在调用自己编写的函数(程序)时,需要将已经写好的函数调用到内存中,或执行source()函数。
2.9.1 简单的例子
例如:编写一个用二分法求非线形方程根的函数,并求方程
x^3 - x - 1 = 0
求解,去初始区间[a, b],当f(a)与f(b)异号,作二分法计算;否则停止计算(输出计算失败信息)。
二分法计算过程为:取中点x=(a+b)/2,若f(a)与f(b)异号,则置b=x;否则a=x,当区间长度小于指定要求时,停止计算。
编写二分法程序,其名称为bisect.R
> fzero <- function(f, a, b, eps=1e-5){
····if (f(a)*f(b)>0)
········list(fail="finding root is fail!")
····else{
·······
repeat {
···········if (abs(b-a)<eps) break
···············x <- (a+b)/2
···············if (f(a)*f(x)<0) b<-x else a<-x
···········}
···········list(root=(a+b)/2, fun=f(x))
····}
}