R:函数入门

来源:互联网 发布:linux 一键安装脚本 编辑:程序博客网 时间:2024/05/18 14:22


    R函数是第一类对象(第一类对象在计算机科学中 指可以在执行期创建并作为参数传递给其他函数或存入一个变量的实体。将一个实体转化为第一类对象的过程叫“对象化”)。这意味着函数在绝大多数情况下,也可以作为对象来操作。

    创建函数的语法如下:

g <- function( x ){

    return ( x + 1 )

}

    这里,function()是一个内置的R函数,其功能就是创建函数。在它的右边,其实是function()的两个参数:第一个参数是所创建函数的形式参数列表,上面这段代码中仅仅是x;第二个参数是函数的主体部分,简称函数体,在本例中为:return ( x + 1 )。第二个参数必须是“expression”类,即表达式类。因此,右边这部分创建了一个函数类的对象,然后赋值给g。

    function()的这两个参数在创建函数之后能够通过函数formals()和body()来获得。如下所示:

> formals( g )

$x > body( g )

{

    return(x + 1)

}

    当在交互模式中使用R时,简单地输入对象的名称就可以把对象打印到屏幕上。函数也不例外,因为函数都是对象。

> g

function( x ){

    return ( x + 1 )

}

注:如果要用这种方式去查看一个代码篇幅很长的函数,可以借助于page(),如page(abline)。

    需要注意的是,R中一些最基本的函数是直接用C语言写的,所以它们不能用前面的这种方式查看代码。

> sum

function (..., na.rm = FALSE)  .Primitive("sum")

 

►匿名函数

    R函数function()的目的是创建函数。我们可以直接调用function()而不给对象命名,这样定义的函数叫做匿名函数,因为它们没有名字。

    当函数只有简短一行并被别的函数调用时,使用命名函数非常方便。

> z <- matrix( c( 1:6 ), nrow=3 )

> f <- function( x ){  x / c( 2, 8 )  }

> y <- apply( z, 1, f )

> y

     [,1]  [,2] [,3]

[1,]  0.5 1.000 1.50

[2,]  0.5 0.625 0.75

> y <- apply( z, 1, function( x ){  x / c( 2, 8 )  } )

> y

     [,1]  [,2] [,3]

[1,]  0.5 1.000 1.50

[2,]  0.5 0.625 0.75

注:忽略赋值给f的中间过程,即在调用apply()时使用一个匿名函数。一这种方式处理通常比在外部定义一个函数更加清晰易懂。当然,如果函数比较复杂,情况就不一样了。


►函数举例

    和大多数编程语言一样,R语言编程的核心是编写函数。函数就是一组指令的集合,用来读取输入、执行计算、返回结果。

    我们先定义一个函数oddcount(),以此简单介绍函数的用法。这个函数的功能是计算整数向量中奇数的个数。代码如下:

# counts the number of odd integers in x

> oddcount <- function(x){

+   k<-0

+   for(n in x){

+     if(n %% 2 == 1)   # %% is the modulo operator

+       k<-k+1

+   }

+   return (k)

+ }

> oddcount( c(1,3,5) )

[1] 3

> oddcount( c(1,2,3,7,9) )

[1] 4

 

    此函数定义了一个名为oddcount的函数,该函数有一个参数x。左花括号引出了函数体的开始部分。在函数体结束之前,R会用+作为提示符,而不是用平常的>,以提醒用户现在还在定义函数(实际上,+是续行符号,不是新输入的提示符)。在键入右花括号来结束函数体之后,R又恢复使用>提示符。

    for(n in x){   if(n %% 2 == 1)  k<-k+1 }这段代码,首先把x[1]赋值给n,然后测试n是奇数还是偶数,之后,接着把x[2]赋值给n,测试其是奇数还是偶数,以此类推,重复后面的过程。这段代码还可以写成:

for(i in 1:length(x)){   if(x[i]%% 2 == 1)  k<-k+1 }。

    return(k)这条语句把k的计算结果返回给调用它的代码,不过,直接写成:k,也可以达到目的。在没有显式调用return()时,R语言的函数会返回最后计算的值。不过,这个方法必须慎重使用。

    在编程语言的术语里,x是函数oddcount()的形式参数(英文名称是formal argument,或formal parameter,简称形参)。在前面例子第一次调用函数时,c(1,3,5)称为实际参数(actual argument,简称实参)。

    只在函数体内部可见的变量对这个函数来说说局部变量。在oddcount()中,k和n都是局部变量,它们在函数返回值以后就撤销了。

注:R函数中的形式参数是局部变量。

    R语言允许TRUE和FALSE缩写为T和F。

 

 


0 0
原创粉丝点击