当<object>是用户定义的?</object>时,如何绘制(对象)

时间:2014-01-21 13:03:16

标签: r plot package

我编写了一个绘制一些图的函数,并返回一个类似于以下格式的列表:

myfun <- function(x, y){
    plot(x, y)
    points(x+1, y+1)
    abline(v=x[1])
    mylist <- list(x=x,y=y,line=x[1])
    return(mylist)
}

这很好用。但是,在R中,通常以下列方式绘制函数:

x <- rnorm(100)
y <- rnorm(100)
lin <- lm(x~y)
plot(lin)

即,使用该函数创建一个对象,然后使用 plot(object)来获取该图。如何设置我的功能以这种方式行事?我已经看过一些编写R包的指南(包括hadley的),但是我找不到这个问题的参考。

我想创建此功能,以便我可以将我创建的内容上传到CRAN或R-Forge。

1 个答案:

答案 0 :(得分:4)

您可以为它创建自己的S3类( R提供了很多面向对象的系统(S3,S4,R5,R.oo,...),另见:http://adv-r.had.co.nz/OO-essentials.html):

# create an object with an own class
lin = list(x=rnorm(100), y=rnorm(100))
class(lin) = "mylin"

# overload plotting function
plot.mylin = function(l) { 
  plot(l$x, l$y)
  points(l$x+1, l$y+1, col=2)
  abline(v=l$x[1])
}

# run it
plot(lin)