R语言中提供了大量的内置函数为用户解决有关问题,同时,R语言中允许用户编写自己的函数来解决实际问题。
R语言中定义自己的函数语法格式:
functionname <- function( arglist ) expr
return (value)
上面的语法中,functionname为自己定义的函数名称;arglist是函数的参数列表,可以没有参数,也可以有1个到多个参数;expr是自己编写的相关语句;value是返回值,如没有返回值,可以不写return部分。
编写函数时可以使用R编辑器的程序脚本功能来编写:在R软件中选择菜单“文件”—>"新建程序脚本",打开“R编辑器”,编写自己的函数程序。编辑完后,选择菜单“文件”—>“保存”,输入函数的文件名即可。在使用时,需要将函数加载到R中:可以使用菜单“文件”—>“运行R脚本文件”,然后选择要运行的函数,或者执行代码“source(函数名所在文件名.R)”即可。
如在R软件下直接编写的函数,可以直接调用。
下面举几个例子来说明一下具体用法:
(1)无参函数
welcom<-function()
{
print("Welcome to my site:www.VeVb.com")
}
将该函数保存到文件
该函数执行时,不需要给出参数,其作用是输出一行字符串:Welcome to my site:www.VeVb.com.
(2)带参数的函数
编写一个函数,求出向量中的最大值
maxvalue<-function(x)
{
if(length(x)==0)
stop("参数x不能为空值。");
maxv<-x[1]
for(i in 2:length(x))
if(x[i] > maxv)
maxv <- x[i]
return(maxv)
}
如使用本函数求下面向量X的值
X<-c(11,34,21,38,71,29)
maxvalue(X)
输出:71
(3)带默认参数的函数
有时一个函数中有多个参数时,部分参数可能在一些情况下用户不必提供或用户无法提供时,可以使用默认值。
编写一个函数,求出三个数的最大值
maxnum<-function(n1,n2=0,n3)
{
maxn <- n1
if(n2 > maxn)
maxn <- n2
if(n3 > maxn)
maxn <- n3
return(maxn)
}
这个自定义函数中,n2使用了默认值0,在调用时,下面几种格式都是合法的。
maxnum(1,2,3)
maxnum(1,n3=3)
上面第二个调用中,参数n2没有给出值,则会使用其默认值,但n3必须使用参数名来调用,否则,会发生n3没有赋值的错误,因为R会按照给出的参数列表从左到右依次给每个参数赋值,如不用参数名,3会给了参数n2,造成没有默认值的参数n3没有赋值的错误。
最好的做法是,将带有默认值的参数放在所有参数的后面。
新闻热点
疑难解答