如何从 R 中的引用 class 中获取 class 名称的列表

how to get list of class names from reference class in R

我有这个代码:

private$svg <- if(is(private$idaPlotObj, "DivosGridBmiPlot")){
  ...
} else {
  ...
}

在我的代码中,我正在尝试重构此代码并从 private$idaPlotObj 中获取 classes 的列表,这是引用 class,但我得到的只是:

[1] "BMIDynamicRatiosPlot"
attr(,"package")
[1] "divosBMI"

当我使用 attr(private$idaPlotObj,"class")class(private$idaPlotObj)

如何从引用 class 中获取所有 class 个名称?如果我有 4 个 classes,我将需要用 is 检查每个。我想比较向量以测试 class 是否在列表中。

以下是你可以做的参考类:

 object@.xData$.refClassDef@refSuperClasses

示例:

setRefClass("Polygon", fields = list(sides="integer"))
setRefClass("Regular")
setRefClass("Triangle", contains = "Polygon")
EQL = setRefClass("EquilateralTriangle", contains = c("Triangle", "Regular"))

tri1 <- EQL$new(sides=3L)

现在要获取 tri1 的所有 类,我们这样做:

tri1@.xData$.refClassDef@refSuperClasses
[1] "Triangle"    "Regular"     "Polygon"     "envRefClass"

编辑

将所有内容放在一起,您可以这样做:

getRefClassNames <- function(obj) {
   c(class(obj), head(obj@.xData$.refClassDef@refSuperClasses, -1))
}

这是一个将其分成几个步骤的解决方案:

  1. 获取对象的当前class名称:
myclass <- class(private$idaPlotObj)
  1. 使用 getRefClass 获取有关关联 classes 的信息:
class_info <- getRefClass(myclass)
  1. 你得到一个对象,其中的信息有点隐藏,所以你必须提取它:
class_info@generator$def@refSuperClasses