我正在阅读Martin Morgan关于引用类的笔记,在第7张幻灯片中,他使用
这是为什么?是否有一份声明所有引用类通用函数(包括
setMethod
来定义show
函数,而没有使用setGeneric
将其之前设置为通用函数。这是为什么?是否有一份声明所有引用类通用函数(包括
show
)的方法列表?setMethod
来定义show
函数,而没有使用setGeneric
将其之前设置为通用函数。show
)的方法列表?show
已经是一个通用函数:
> isGeneric("show")
[1] TRUE
getGenerics
方法获取父环境中的泛型列表:> getGenerics()
An object of class "ObjectsWithPackage":
Object: "-" "!=" "[" "*" "/" "&" "%/%" "%%" "^" "+"
Package: "base" "base" "base" "base" "base" "base" "base" "base" "base" "base"
Object: "<" "<=" "==" ">" ">=" "|" "$" "$<-" "abs" "acos"
Package: "base" "base" "base" "base" "base" "base" "base" "base" "base" "base"
Object: "acosh" "addNextMethod" "Arith" "asin" "asinh" "atan" "atanh" "body<-"
Package: "base" "methods" "base" "base" "base" "base" "base" "base"
Object: "cbind2" "ceiling" "coerce" "coerce<-" "Compare" "Complex" "cos"
Package: "methods" "base" "methods" "methods" "methods" "base" "base"
Object: "cosh" "cummax" "cummin" "cumprod" "cumsum" "digamma" "exp" "expm1"
Package: "base" "base" "base" "base" "base" "base" "base" "base"
Object: "floor" "gamma" "initialize" "kronecker" "lgamma" "loadMethod" "log"
Package: "base" "base" "methods" "base" "base" "methods" "base"
Object: "log10" "log1p" "log2" "Logic" "Math" "Math2" "Ops" "rbind2"
Package: "base" "base" "base" "base" "base" "methods" "base" "methods"
Object: "round" "show" "sign" "signif" "sin" "sinh" "slotsFromS3" "sqrt"
Package: "base" "methods" "base" "base" "base" "base" "methods" "base"
Object: "Summary" "tan" "tanh" "trigamma" "trunc"
Package: "base" "base" "base" "base" "base"
getGenerics()[getGenerics()@package=='methods']
吗?还是整个列表? - tchakravartycummax
是S4/引用类的通用函数,所以可能只适用于methods
包中的函数。我会测试一下是否正确。感谢您的答案,它让我更接近目标了。 - tchakravartycummax
不可能成为所有引用类的通用函数,因此只有属于methods
包的函数才适用于引用类。 - tchakravarty?show
,您会发现默认分配到showDefault
。我记得曾经看到过一份其他可用方法的列表,但目前无法找到链接,所以对于您的第二个问题,我不知道。
show
方法:F = setRefClass("F", methods=list(show=function() { cat(class(.self), "!\n") }))
。 - Martin Morgan