有没有可能有;嵌套的;R中多个类的方法?

有没有可能有;嵌套的;R中多个类的方法?,r,class,R,Class,假设a有两个对象: 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”和基本/其他自定义类?例如 print.myclass.

假设a有两个对象:

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”和基本/其他自定义类?例如

print.myclass.integer = function(x) { some code }
print.myclass.character = function(x) { different code }

如果是,正确的步骤是什么?

您可以通过检查对象的其他类来解决问题。例如:

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"

print.myclass要对多个类使用嵌套方法,只需嵌套
UseMethod()


print.myclass我想不在S3中。S4基于参数执行多重分派,我认为这不是您想要的。除此之外,我想您可能还需要使用引用类或R6。或者,要保留dispatch-y,
if(“integer%in%class(x))print.myclass.integer(x,…))
Hmm,这似乎很灵活。我会在一些实验后再与您联系。Hm,很有趣。在包中导出方法时,这种方法是否有任何问题?我不确定。为什么您认为会有问题?
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"