我想创建一个 S3 类。我如何确定哪种设置类属性的方式是正确的(因为它会有所不同)?
1)覆盖类属性
object <- data.frame(field1 = "a", field2 = 2)
class(object)
# [1] "data.frame"
class(object) <- "MyClass" # set the class by overwriting the existing one
class(object)
# [1] "MyClass"
2)附加类属性
我还可以附加类名(在开头或结尾):
object2 <- data.frame(field1 = "a", field2 = 2)
class(object2) <- append(class(object2), "MyClass")
class(object2)
# [1] "data.frame" "MyClass"
object3 <- data.frame(field1 = "a", field2 = 2)
class(object3) <- append("MyClass", class(object3))
class(object3)
# [1] "MyClass" "data.frame"
我知道在开头和结尾添加类名可能会更改被调用的函数(从?class
):
当泛型函数 fun 应用于具有类属性 c("first", "second") 的对象时,系统会搜索名为 fun.first 的函数,如果找到,则将其应用于对象。如果没有找到这样的函数,就会尝试一个名为 fun.second 的函数。如果没有类名产生合适的函数,则使用函数 fun.default(如果存在)。
例如。如果我定义一个重载函数,它并不总是被调用:
print.MyClass <- function(x) { print("printing MyClass") }
print(object)
# [1] "printing MyClass"
print(object2)
# field1 field2
# 1 a 2
print(object3)
# [1] "printing MyClass"
所以我的问题是:我如何决定如何设置类名(我必须考虑哪些[其他]标准)?