• 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)

  • 相关阅读:
    AC自动机讲解超详细
    区间树Splay——[NOI2005]维护数列
    区间树Splay——[NOI2005]维护数列
    Trie学习总结
    微信小程序刮刮乐
    微信小程序获得高度
    微信小程序多video播放暂停问题
    vue中的问题思考
    vue的开发技巧
    微信小程序消息推送,前端操作
  • 原文地址:https://www.cnblogs.com/koujiaodahan/p/16213404.html
Copyright © 2020-2023  润新知