说一个有两个对象:
a = 1:3
class(a) = append("myclass", class(a))
class(a)
[1] "myclass" "integer"
b = c("a", "b", "c")
class(b) = append("myclass", class(b))
class(b)
[1] "myclass" "character"
那么可以定义嵌套方法,这些方法将依赖于“myclass”和基本/其他自定义类的两者吗? E.g。
print.myclass.integer = function(x) { some code }
print.myclass.character = function(x) { different code }
如果是,那么正确的程序是什么?
答案 0 :(得分:1)
您可以通过在print.myclass
内查看对象的其他类来解决此问题。例如:
print.myclass<-function(x,...) {
if ("integer" %in% class(x)) print("some code") else
if ("character" %in% class(x)) print("some other code")
}
a
#[1] "some code"
b
#[1] "some other code"
答案 1 :(得分:0)
要为多个类设置嵌套方法,您只需嵌套UseMethod()
:
print.myclass <- function(x) {
UseMethod("print.myclass", x)
}
print.myclass.integer <- function(x) {
print(paste("This method only prints the higher 'x': ", max(x)))
}
print.myclass.character <- function(x) {
cat("This method scrambles the 'x' values:\n")
print(sample(x, length(x)))
}
print(a) # [1] "This method only prints the hihger 'x': 3"
print(b) #This method scrambles the 'x' values:
# [1] "a" "c" "b"
当您使用print()
时,它会调用UseMethod()
,这将检查myclass
方法。然后,它将再次调用UseMethod()
,现在将检查integer
函数的第二个类(character
或print.myclass
)的方法。
查看?UseMethod
,methods(print)
和The R Language Definition,第28-31页;它帮助了我。