Получение списка подклассов ссылочного класса - PullRequest
1 голос
/ 30 октября 2019

Я создал AbstractFoo ссылочный класс и несколько подклассов, теперь я хочу получить все имена подклассов (AFoo, BFoo, CFoo). Кажется, это возможно при использовании слота subclasses класса S4, но я хотел бы получить то же самое для ссылочного класса.

Например, мой код может быть:

AbstractFoo <- setRefClass("AbstractFoo")
AFoo <- setRefClass("AFoo", contains = c("AbstractFoo"))
BFoo <- setRefClass("BFoo", contains = c("AbstractFoo"))
CFoo <- setRefClass("CFoo", contains = c("AbstractFoo"))

Так что я бы хотел что-то, что возвращает c("AFoo", "BFoo", "CFoo").

1 Ответ

1 голос
/ 01 ноября 2019
foo = function(nm){
    objs = ls(envir = .GlobalEnv)
    tmp = setNames(lapply(objs, function(objName){
        thisObj = get(objName)
        if (class(thisObj) == "refObjectGenerator" & objName != nm){
            is(thisObj(), nm)
        }
    }), objs)
    tmp = unlist(tmp)
    names(tmp)[tmp]
}

foo("AbstractFoo")
#[1] "AFoo" "BFoo" "CFoo"
...