R测试参考类

Mar*_*aph 5 r reference-class

是否有一种快速而肮脏的方法来测试实例是否来自引用类?

标准的R对象测试产生以下结果 - 但似乎没有任何东西专门标记引用类.

classy <- setRefClass('classy',
    fields = list(
        count = 'numeric'
    ),
    methods = list(
        initialize = function( data=NULL ) {
            .self$data <<- data
        }
    )
)

instance <- classy$new() # instantiation

isS4(instance) # TRUE
mode(instance) # "S4"
typeof(instance) # "S4"
class(instance) # [1] "classy" attr(,"package") [1] ".GlobalEnv"
dput(instance) # new("classy", .xData = <environment>)
str(instance) # 
# Reference class 'classy' [package ".GlobalEnv"] with 1 fields
#  $ count: num(0) 
#  and 13 methods, of which 1 are possibly relevant:
#    initialize
Run Code Online (Sandbox Code Playgroud)

42-*_*42- 6

试试这个:

 inherits(instance, "envRefClass")
# should return [1] TRUE
Run Code Online (Sandbox Code Playgroud)

这可以在"继承"部分找到help(ReferenceClasses).我怀疑John Chambers可能会反对称这个"脏".

Apropos Hadley的评论is记录为行为大致相同,inherits但具有识别条件继承的附加能力:

is(instance, "envRefClass")
#TRUE
Run Code Online (Sandbox Code Playgroud)

  • 对于基于s4的类,我认为使用is更具规范性 (2认同)