目录
一、正式编写程序
二、设计第一个函数
三、函数也是一个对象
四、程序代码的简化
五、return()函数的功能
六、省略函数的大括号
七、传递多个参数函数的应用
7.1 设计可传递2个参数的函数
7.2 函数参数的默认值
7.3 3点参数“…”的使用
八、函数也可以作为参数
8.1 正式实例应用
8.2 以函数的程序代码作为参数传递
九、局部变量和全局变量
十、通用函数
十一、设计第一个通用函数
11.1 优化转换百分比函数
11.2 设计通用函数的默认函数
一、正式编写程序
在前面的内容中,我们使用了R语言的直译器,在RStudio窗口左下方的Console窗口的代码区输入代码,立即可在此窗口获得执行结果。从现在起,我们将在RStudio窗口左上方的Source窗口编辑所有程序代码,然后存储,最后再编译和执行。
二、设计第一个函数
单击在RStudio窗口左上角Source窗口的“Source”按钮,结果如下:
上述程序最大的不便之在于,如果我们有其他一系列数据要处理,则要修改程序第1行的数值向量。下面的函数格式可以改良此缺点:
函数名称<-function(参数1,参数2,...)
{
程序代码
程序代码
...
}
在上述执行结果中,执行source()函数后,所设计的函数ch11_2()已被加载,所以以后我们可以自由使用这个函数。
三、函数也是一个对象
其实函数也是一个对象,例如,在Console窗口直接输入对象名称,可以看到此对象的内容。
特别需要注意的是,不可加“()”,若加上“()”,则表示引用此函数,此时必须有参数在“()”,即括号内,否则会有错误产生。
我们也可以设定一个新的对象等于这个函数对象。
R语言的这个功能虽然好用,但风险是,若是不小心使用一个与这个函数相同的变量名称,此时,这个函数就会被系统删除。所以为对象取名字时要小心,尽量避免出现相同的名字。
四、程序代码的简化
五、return()函数的功能
六、省略函数的大括号
如果函数体只有1行,那么也可以省略大括号。
七、传递多个参数函数的应用
如果想要传递多个参数,那么只要将新的参数放在function()的括号内,各参数间彼此用逗号隔开即可。
7.1 设计可传递2个参数的函数
7.2 函数参数的默认值
7.3 3点参数“…”的使用
实际上在设计函数时会碰上需传递更多参数的情况,如果参数一多,会使设计function()的参数列表变得很长,以后调用时的参数列表也会很长,碰上这种情况,R语言提供的3点参数“…”的概念,这种3点参数通常会放在参数列表的最后面。
八、函数也可以作为参数
8.1 正式实例应用
若省略第2个参数,则预设是执行round()函数。
如果调用函数时第2个参数为函数,则此参数函数将取代第3行的Xfun()。
8.2 以函数的程序代码作为参数传递
R语言既可支持将函数作为参数传递,也可支持将函数的程序代码当作参数传递,这类传递程序代码而不传递函数名的方式,被称为匿名函数。
上述代码中,以下函数的程序代码已被当作参数传递了。
function(x) round(x*100/sum(x))
九、局部变量和全局变量
对于一个函数而言,这个函数内部所使用的变量称为局部变量,程序整体所使用的变量会在Workspace窗口内看到,称为局部变量。对于函数所属的局部变量而言,函数调用结束变量就消失了。对于全局变量而言,只要Workspace窗口内保存,就随时可调用。
十、通用函数
何为通用函数?如果一个函数接收到参数后,什么事都不做,只是将工作分配给其他函数执行,这类函数被称为通用函数。
对于R语言,其实最常用的通用函数是print(),下列是print()函数的程序代码。
许多通用函数在设计时,大都会同时设计一个默认函数,如果没有特定的函数可使用,则调用默认函数,比如print.default()。
十一、设计第一个通用函数
11.1 优化转换百分比函数
11.2 设计通用函数的默认函数