R语言置换函数的定义

来源:互联网 发布:阿里云与传统工业合作 编辑:程序博客网 时间:2024/06/07 13:02

R中可以自定义置换函数。 所谓的置换函数,就是左边不是变量名的赋值语句。例如:

names(x) <- c(‘a’, ‘b’)

这个语句设置了x的元素名称,它就是一个置换函数,因为左边不是变量名。从下面的例子就可以看出来发生了什么:

x <- list(1:10, 2:11)names(x) <- c('a', 'b')y <- list(1:10, 2:11)y <- 'names<-'(x = x, value = c('a', 'b'))xy

结果:

x## $a##  [1]  1  2  3  4  5  6  7  8  9 10## ## $b##  [1]  2  3  4  5  6  7  8  9 10 11y## $a##  [1]  1  2  3  4  5  6  7  8  9 10## ## $b##  [1]  2  3  4  5  6  7  8  9 10 11

从上面可以看出,names(x) <- value这个句子实际上调用的函数是’names<-‘(x, value),这个函数会返回更新名称后的对象。

下面的例子说明如何自己定义置换函数:

obj <- list(x = 1:10, y = 1 : 10)class(obj) <- 'test''xvar<-' <- function (x, value) {  x$x <- value  return(x)}xvar(obj) <- 11 : 20print(obj)

结果:

## $x##  [1] 11 12 13 14 15 16 17 18 19 20## ## $y##  [1]  1  2  3  4  5  6  7  8  9 10## ## attr(,"class")## [1] "test"

下面的例子与上面的例子类似,但是定义了S3类的方法:

obj <- list(x = 1:10, y = 1 : 10)class(obj) <- 'test''xvar<-' <- function (x, ...) {  UseMethod('xvar<-')}'xvar<-.test' <- function (x, value) {  x$x <- value  return(x)}xvar(obj) <- 11 : 20print(obj)

结果:

## $x##  [1] 11 12 13 14 15 16 17 18 19 20## ## $y##  [1]  1  2  3  4  5  6  7  8  9 10## ## attr(,"class")## [1] "test"
0 0
原创粉丝点击