参考资料:R语言统计分析【第2版】
一个函数的结构大致如此:
myfunction<-function(arg1,arg2,...){
statements
return(object)
}
函数中的对象只在函数内部使用。返回对象的数据类型是任意的。
假设我们要编写一个函数,用来计算数据对象的集中趋势和离散程度。要求此函数可以选择性地给出参数统计量(均值和标准差)和非参数统计量(中位数和绝对中位差),结果以一个含名称列表的形式给出。
# 构建自定义函数
mystats<-function(x,parametric=TRUE,print=FALSE){if (parametric){center<-mean(x);spread<-sd(x)}else{center<-median(x);spread<-mad(x)}if (print & parametric){cat("Mean=",center,"\n","SD=",spread,"\n")} else if (print & !parametric){cat("Median=",center,"\n","MAD=",spread,"\n")}result<-list(center=center,spread=spread)return(result)
}
# 设置随机种子
set.seed(1234)
# 取随机数
x<-rnorm(500)
# 执行自定义函数
y<-mystats(x)
y$center
y$spready<-mystats(x,parametric=FALSE,print=TRUE)
另一个自编函数是switch结构的。此函数可以让用户选择输出当天日期的格式。在函数声明中位参数指定的值作为默认值。在此函数中,如果未指定type,则long将作为默认的日期格式。
mydate<-function(type='long'){switch(type,long=format(Sys.time(),"%A %B %d %Y"),short=format(Sys.time(),'%m-%d-%y'),cat(type,"is not a recognized type\n"))
}
mydate("long")
mydate()
mydate("short")
mydate("medium")