我对R S4课程来说很新。我试图定义一个允许NULL的虚拟类和Matrix包中的“Matrix”(http://cran.r-project.org/web/packages/Matrix/)。 我尝试使用“setClassUnion”和以下代码:
library(Matrix)
setClassUnion("MatrixOrNULL", c("Matrix", "NULL"))
我希望新的虚拟类“MatrixOrNULL”允许NULL和包“Matrix”中的所有实际类。但是,当我尝试检查实例是否为“MatrixOrNULL”时,我得到了一些奇怪的答案,如下所示:
# Define a Matrix, a data frame and a string
mt <- Matrix(matrix(1:6, 2, 3))
df <- data.frame(x=1:5, y=6:10)
st <- "abc"
# Check whether it is a MatrixOrNULL
is(NULL, "MatrixOrNULL") # TRUE
is(mt, "MatrixOrNULL") # TRUE
is(df, "MatrixOrNULL") # TRUE
is(st, "MatrixOrNULL") # TRUE
我认为“data.frame”和“character”变量不是“MatrixOrNULL”,但它返回“TRUE”me。 (实际上我尝试的一切都是“MatrixOrNULL”对象。)
有谁可以帮我弄清楚这个虚拟课的问题是什么?
答案 0 :(得分:2)
Matrix对象的实际类(class(mt)
)似乎是'dgeMatrix'
所以这似乎做了你之后的事情:
setClassUnion("MatrixOrNULL", c("dgeMatrix", "NULL"))
不幸的是,这些对象之间似乎没有共享类。所以有几种方法:
1)您可以简单地检查Matrix包中的所有类,并在类联合中明确地引用它们:https://cran.r-project.org/web/packages/Matrix/Matrix.pdf
2)如果你想知道它是否来自Matrix包,
您可以随时检查attr(object,'package')
是否等于&#39; Matrix&#39;。这看起来更像是你所追求的,因为从每个Matrix类继承听起来都会有冲突。