【问题标题】:Is 'show' a normal S4 generic function?'show' 是一个普通的 S4 通用函数吗?
【发布时间】:2012-07-11 18:46:26
【问题描述】:

我正在尝试为我的类创建一个方法,该方法继承自 data.frame。我最初希望也能从 data.frame 继承“show”方法,但我也可以自己编写。我定义了我的类和“显示”方法如下:

setClass("SCvec", representation(auth = "character",
    dev = "character",
    sensor = "character",
    channel = "character",
    starttime = "character",
    endtime = "character"),
    contains="data.frame")
setMethod("show", signature(x="SCvec"), function(x) print(x))

当我在 R 控制台中输入 show 时,它会打印出来:

从包“methods”定义的“show”的standardGeneric

function (object) 
standardGeneric("show")
<bytecode: 0x0396bee8>
<environment: 0x0393ab60>
Methods may be defined for arguments: object
Use  showMethods("show")  for currently available ones.
(This generic function excludes non-simple inheritance; see ?setIs)

所以看起来我不需要自己使用 StandardGeneric() 将它变成泛型。但是当我运行 setMethod("show", signature(x="SCvec"), function(x) print(x)) 行时,我得到了错误

Error in match.call(definition, call, expand.dots) : 
  unused argument(s) (x = c("SCvec", ""))

我已经定义了这个方法,就像我定义任何其他方法一样。为什么这个方法定义不起作用? 'show' 与其他通用函数有什么不同吗?

【问题讨论】:

    标签: r show s4 generic-function


    【解决方案1】:

    函数show 接受一个参数object,因此您需要针对该正式参数定义您的签名和函数定义:

    setMethod("show", signature(object="SCvec"), function(object) print(object))
    

    您还可以通过输入查看为show 定义的其他方法

    showMethods(show)
    

    这表明所有其他方法也是根据object 类定义的。

    【讨论】:

    • 谢谢!我犯了一个愚蠢的错误……我之前定义的所有方法都将“x”作为参数,而我只是复制并粘贴了“show”的代码。
    • getGeneric("show") 提供对通用签名的交互式查看。
    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2017-02-03
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多