【问题标题】:What methods do I need to implement for my matrix-like class in R?我需要为 R 中的类矩阵类实现哪些方法?
【发布时间】:2014-07-21 18:06:55
【问题描述】:

我正在 R 中设计一个类,它具有许多与二维矩阵相同的行为:它可以按行或列进行子集化,它有暗名等。所以我希望它支持所有“标准”矩阵运算,例如rownames[ 等。但我不确定所有这些方法名称是什么,也不确定我需要实现哪些。例如,我需要显式实现rownamesrownames<-,还是实现dimnamesdimanmes<- 就足够了?基本上,是否有一个列表,列出了一个类必须实现的所有函数才能像二维矩阵一样的东西?

【问题讨论】:

  • 或者只使用内置矩阵。我敢打赌它比你写的任何东西都要好。
  • 我没有制作矩阵。我正在制作一些与矩阵具有相同行为的东西,但也有其他行为和属性。
  • 除非您希望它执行matrix-class 对象执行的操作,否则为什么不同时为它分配matrixryans_matrix 类?
  • 嗯,我希望它在 2 维中是可子集的,并且我希望它具有可获取和可设置的暗名。为了论证,假设该类是由几个大小相同的矩阵组成的,它们都需要以同步方式进行子集化,并且共享一组共同的暗名。所以它不是一个真正的矩阵,我需要实现我自己的所有方法,因为矩阵的[ 方法当然不会在未经修改的情况下工作。

标签: r oop matrix interface


【解决方案1】:

你能扩展matrix 类吗?您可以在不妨碍现有方法的情况下添加一堆其他东西。这比重写所有基础知识要容易得多。

对于泛型,你可以这样做

> methods(class = "matrix")
 [1] anyDuplicated.matrix as.data.frame.matrix as.raster.matrix*   
 [4] boxplot.matrix       determinant.matrix   duplicated.matrix   
 [7] edit.matrix*         head.matrix          isSymmetric.matrix  
[10] relist.matrix*       subset.matrix        summary.matrix      
[13] tail.matrix          unique.matrix 

对于rownames 之类的东西,帮助说明它适用于“类似矩阵的对象”,因此根据您的类的不同,它可能会起作用。您可以查看代码以了解事情是如何工作的,在 rownames 的情况下,看起来如果您定义了 dimnames 或者 NROW 您很好。坏消息是,因为它适用于“类似矩阵的对象”,而不是作为矩阵类的方法,所以您将很难找到其他此类函数的列表。

【讨论】:

  • 你的最后一句话准确地描述了我的问题。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 2016-02-22
  • 1970-01-01
  • 2013-04-10
  • 2012-01-27
  • 1970-01-01
相关资源
最近更新 更多