我有一些函数采用非常特定的矩阵,并在使用我制作的另一个函数时加载了特定的信息。目前该函数接受的矩阵是正常的 R 矩阵类型。但是我想将它们分配为不同的类型或类,以便实现简单的输入检查,这样用户就不能将任何矩阵放入函数中。
在网上看到几个例子后,我认为 S3 方法会很简单:
mat1 <- matrix(c(1:10),ncol=5)
colnames(mat1) <- c("ONE","TWO","THREE","FOUR","FIVE")
as.sdpmgdna <- function(x) {
class(x) <- "sdpmgdna"
return(x)
}
mat2 <- as.sdpmgdna(mat1)
就好像我返回 mat2 我看到一个矩阵一样,这似乎是有效的,如果我通过 indecies mat2[1,2] 调用它,我会得到我应该得到的正确值。但是我不能确定有些事情已经改变了——它现在被描述为 sdpmgdna[10] 即它似乎忽略了它有 2 个维度,尽管执行上述操作并将 mat2 打印到屏幕上显示它确实有 2 个维度。另一个奇怪的事情是,如果我这样做colnames(mat2)
,它们就会被退回。但是,如果我尝试查找单个列的 colname,例如colname(mat2[,4])
,则返回的值是NULL
. 任何人都可以解释为什么这是或我应该做什么 - 我真的希望它基本上是一个矩阵,但是因为函数要求它在什么和多大的矩阵方面非常具体,将它定义为另一个类会错误和输入检查更容易 - 并允许我使用 R 的方法机制,所以我所有的自定义绘图函数都可以只是 plot() 的方法。