R作为一门编程语言,可以自行编写函数,很合理吧。
function
自编函数
R中的许多函数都是包含了已有函数。看一下自行编写函数的的语句基本结构:
funname <- function(arg1, arg2, arg3, ...) {
statements
return(object)
}
函数可以添加默认参数。函数中的对象只在函数内部使用。 也可以用return
函数返回R对象,返回对象的数据类型是任意的, 从标量到列表皆可。
继续在使用例子中进行学习,使用书中的例子,编写一个函数, 用来计算数据对象的集中趋势和散布情况。 此函数应当可以选择性地给出参数统计量(均值和标准差) 和非参数统计量(中位数和绝对中位差) 。
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(50)
> mystats(x)
$center
[1] -0.453053
$spread
[1] 0.8850435
说明一下,parametric=TRUE
默认值为真,为真则计算平均值和方差; print=FALSE
默认值为假,即不打印cat
中的内容;return(result)
函数表示返回一个列表对象,包含输入数据的集中趋势和离散趋势统计结果。
使用switch
结构
同样引用书中的例子,输入当天的日期,格式选择或长或短,默认为长格式。
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")
[1] "星期日 八月 13 2023"
> mydate("none")
none is not a recognized type
type
有两个参数可选,long
和 short
;如果是其他值,就会输出cat
函数中的内容用来提示错误输入的参数值信息。
函数warning()
可以生成一条错误提示信息,message()
可以生成一条诊断信息, 或用stop()
停止当前表达式的执行并提示错误。