我编写了一个绘制一些图的函数,并返回一个类似于以下格式的列表:
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。
答案 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)