r语言中cutree函数_R语言系列 自定义函数

【免责声明:本文用于教学】

08. 自定义函数

1. R语言中,自定义函数的基本格式为:

myfun<-function(arglist){

statements

return(object)

}

其中,myfun为函数名称;arglist为参数列表;大括号中的部分为函数体。

函数体通常包含三部分:

(1)异常处理

输入的数据不能满足函数计算的要求,或者类型不符,应设计异常处理机制提示哪个地方出现错误;

(2)内部处理过程

包括具体的内部处理步骤,与该函数要完成的功能有关;

(3)返回值

用函数return()给出,返回对象的类型是任意的;函数在内部处理过程中,一旦遇到return()就会终止运行函数体,将return()内的数据作为函数处理的结果返回。

2. 自定义函数及调用实例操作

下面自定义函数计算标准差:

(1)先在RStudio的代码编辑窗口编写函数,并保存为

E:办公资料R语言R语言学习系列codesstd2.R

##计算标准差

std2<-function(x)

{

#异常处理

if(!is.numeric(x)){

stop("the input data must be numeric! n")

}

if(length(x)==1){

stop("can not compute std for one number,

a numeric vector required. n")

}

result<-sqrt(sum((x-mean(x))^2)/(length(x)-1))

return(result)

}

(2)调用std2.R

要调用创建好的函数,在命令控制台窗口,先使用

source("std2.R",encoding="utf-8")

注意改到当前路径;若不加encoding="utf-8"将弹出警告信息。

再调用函数即可。

> setwd("E:/办公资料/R语言/R语言学习系列/codes")

> source("std2.R",encoding="utf-8")

> std2(c(2,6,4,9,12))

[1] 3.974921

> std2(3) #输入数据为1个数值,异常处理机制报错

Error in std2(3) : can not compute std for one number,

a numeric vector required.

> std2(c("1","2")) #输入数据不是数值型,异常处理机制报错

Error in std2(c("1", "2")) : the input data must be numeric!

或者创建并运行脚本文件:(选中代码,点run按钮)

2a4c673390462a60aa10eb6d60dbe195.png

练习:理解并使用以下自定义函数

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)

}

要看此函数的实战情况,首先需要生成一些数据(服从正态分布的,大小为500的随机样本):

set.seed(1234)

x <- rnorm(500)

再执行语句:

y <- mystats(x)

之后,y$center将包含均值(0.001 84),y$spread将包含标准差(1.03),并且没有输出结果。

如果执行语句:

y <- mystats(x, parametric=FALSE, print=TRUE)

y$center将包含中位数(–0.0207),y$spread将包含绝对中位差(1.001)。另外,还会输出以下结果:

Median= -0.0207

MAD= 1

练习:下面让我们看一个使用了switch结构的用户自编函数,此函数可让用户选择输出当天日期的格式。在函数声明中为参数指定的值将作为其默认值。在函数mydate()中,如果未指定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 typen")

)

}

实战中的函数如下:

> mydate("long")

[1] "Monday July 14 2014"

> mydate("short")

[1] "07-14-14"

> mydate()

[1] "Monday July 14 2014"

> mydate("medium")

medium is not a recognized type

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值