参考资料: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$spread
y<-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")