2017-10-06 83 views
0

我目前正在处理一些代表统计模型的属性列表。例如,假设我有一个矩阵,一个数字向量和一个整数。如何判断R如何绘制某个类的对象?

myobj = list(amatrix = matrix(1:9,3,3),avector = c(1:3),aninteger = 1) 
class(myobj) = 'myclass' 

假设出于某种原因,我可以创建一个代表这个类的对象的图。我怎样才能让plot(myobj)认识到对象的类别为'myclass',并以所需的方式打印它,例如image(myobj$amatrix)

我认为这个问题本质上是如何'修改'R的绘图函数,以便它知道如何处理新定义的对象类?执行此修改时,我可以使用其他软件包的功能,如ggplot吗?

从更一般的意义上讲,处理不同类别对象的函数如何知道如何为每个类执行操作?

对于R中的类我几乎没有任何经验,所以即使关于类的一些简单指南也应该有所帮助。

+3

你想为你的类的S3方法。有关信息,请参见[Hadley Wickham的书](http://adv-r.had.co.nz/S3.html)。基本上你需要定义'plot.myclass' – emilliman5

回答

1

正如mentionned由@emilliman您可以定义自己的方法:

myobj = list(amatrix = matrix(1:9,3,3),avector = c(1:3),aninteger = 1) 
class(myobj) <- 'myclass' 
plot.myclass <- function(x) image(x$amatrix) 

methods(plot) # check the 4th element of 3rd line :) (list will differ depending on what packages are loaded) 
# [1] plot.acf*   plot.data.frame* plot.decomposed.ts* plot.default  plot.dendrogram* plot.density*  plot.ecdf   
# [8] plot.factor*  plot.formula*  plot.function  plot.hclust*  plot.histogram*  plot.HoltWinters* plot.isoreg*  
# [15] plot.lm*   plot.medpolish*  plot.mlm*   plot.myclass  plot.ppr*   plot.prcomp*  plot.princomp*  
# [22] plot.profile.nls* plot.R6*   plot.raster*  plot.spec*   plot.stepfun  plot.stl*   plot.table*   
# [29] plot.ts    plot.tskernel*  plot.TukeyHSD* 

#and plot : 
plot(myobj) 
相关问题