在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.3 函数入门和大多数编程语言一样,R语言编程的核心是编写“函数”。函数就是一组指令的集合,用来读取输入、执行计算、返回结果。 首先,我们告诉R想定义一个名为oddcount的函数,该函数有一个参数x。左花括号引出了函数体的开始部分。本例中,每行写一条R语句。 首先,把x[1]赋值给n,然后测试n是奇数还是偶数。如果像本例中那样,n是奇数,则计数变量k增加。接着把x[2]赋值给n,测试其是奇数还是偶数,以此类推,重复后面的过程。 在这里,length(x)是x的元素个数。假设x有25个元素。则1:length(x)就是1:25,意思是依次取1、2、3、……、25。上面的代码也能奏效(除非x的长度为0),但是R语言编程的戒律之一就是要尽可能避免使用循环,如果不能避免,就要让循环更简洁。重新看看这段代码原来的版本: 它更简单清晰,因为我们不需要使用length()函数和数组下标。 这条语句把k的计算结果返回给调用它的代码。不过,直接像下面这样写也可以达到目的: 在没有显式调用return()时,R语言的函数会返回最后计算的值。不过,这个方法必须慎重使用,7.4.1节会详细讨论这个问题。 需要注意的是,R函数中的形式参数是局部变量,这点非常重要。比如运行下面的命令: 现在,假如oddcount() 的代码改变了x的值,则z的值不会改变。调用oddcount()之后,z的取值还和之前一样。在计算函数调用的取值时,R会把每个实际参数复制给对应的局部参数变量,继而改变那些在函数外不可见的变量的取值。本书第7章将详细介绍“作用域法则”,上面提到的这些只是简单的例子。 这里的y就是全局变量。 如果程序员没有在函数调用时给y设定一个值,则y将初始化为2。同理,z也有默认值TRUE。 这里,数值12是x的实际参数,而且我们接受了y的默认值2,不过我们覆盖了z的默认值,将其设定为FALSE。 |
请发表评论