我在各种包中都看到过这些实例。
1)
foo <- setClass('foo',[slots defined])
bar <- foo([data ])
或者 2)
setClass('foo',[slots defined])
bar <- new('foo',[data])
性能或
NAMESPACE
文件中所需的材料是否有任何差异?
它们是相同的。
您的
foo(...)
正在呼叫new("foo", ...)
拳头面包屑:
# slots or something need to be defined
# otherwise we would get error during instantiation
foo = setClass("foo", slots = c(x = "numeric"))
foo
# class generator function for class “foo” from package ‘.GlobalEnv’
# function (...)
# new("foo", ...)
所以
foo
返回一个函数 new("foo", ...)
?
还有一些事情不会有任何结果:
fo = unclass(foo)
is(fo)
# [1] "function" "OptionalFunction" "PossibleMethod"
print(fo)
# <S4 object of class NULL>
# attr(,"className")
# [1] "foo"
# attr(,"className")attr(,"package")
# [1] ".GlobalEnv"
# attr(,"package")
# [1] ".GlobalEnv"
我没有继续那里,而是查看了代码:
class(foo)
# [1] "classGeneratorFunction"
# attr(,"package")
# [1] "methods"
显然,
setClass
返回一个classGeneratorFunction
的对象:
setClass <-
...
invisible(classGeneratorFunction(classDef, where))
但我想指出以下几行:
body(fun) <- substitute(new(CLASS, ...),
list(CLASS = classDef@className))