R 自定义函数

  • 函数调用

R 所有函数的调用格式为 function(argument1=value1, argument2=value2,...)    如t.test(x=sample,mu=4.5)

 

对于二元计算 a %x% b 等价于 "x"(a,b) 如

 > "+"(2,3)

 [1] 5

从function(   开始到函数结尾的右括号) 中间内容都是参数,各参数用逗号隔开。空格和换行会被忽略,"#"开头的话会注释掉一行。 所以参数很长时,可以通过换行和空格使代码更易读。

  • 函数自定义,在R,函数作为对象保存,因此只需用赋值符号<-和function()函数

函数名<-function(参数1,参数2,...){

  对参数进行一行或多行计算

  return(计算结果)

}

注:很多时候最后一句的计算结果(非赋值计算)就是要return结果,此时,return语句可以省略。 不过有return会增加代码易读性

  传参,可以通过关键字,可以通过位置

如 SE<-function(x){

  s<-sd(x)

  n<-length(x)

  result<-s/sqrt(n)

  return(result)

}

 

> SE(c(5,6,5,5,4,5,6,6,5,4,5,3,8))

[1] 0.3367673 

 

 

  • 定义并执行简单的匿名函数语句,常与apply家族函数联用有很好效果 

如 sapply(1:5,function(x) x^2)

 

 或定义二元运算符

如"%el%"<-function(x,y) pi*x*y  #这里注意运算符用引号扩起来,

> 2 %el% 5  #调用需用 %运算符%  百分号识别

[1] 31.41593

 

  • 函数内进一步定义函数即闭包,定义处没区别,调用时用两个()(),不然一个()返回函数 如

 myfunc<-function(){

a=5

function(){

b=10

return(a*b)

}

}

 

  •  数量不定的参数用...传入,然后在list()读取如:

my_func<-function(arg1,arg2=100,...){

other_args<-list(...)

print(arg1)

print(arg2)

print(other_args)

}

my_func("foo",cities = c("崇阳", "Αθήνα", "つがる"), nums = c(3,4,6))  # 第一个是未知参数。后边带着关键词表示不对应arg2等,而是对应...部分

 my_func("foo",c("崇阳", "Αθήνα", "つがる"), c(3,4,6))   #挨个位置对应参数

> my_func(arg1="foo",arg2=c("崇阳", "Αθήνα", "つがる"),...= c(3,4,6)) #这种写法没太大必要

 

  • 可以用assign()或<<-实现将函数内数据赋值给函数外,即global environment, 但不建议这样。环境不同,计算有时失效。 如

x<-5

fun1<-function(){

assign("x",100,envir=.GlobalEnv)

 

posted on 2022-05-01 17:29  BioinformaticsMaster  阅读(347)  评论(0编辑  收藏  举报

导航