【问题标题】:How to find out which method is dispatched to an S3 object?如何找出将哪个方法分派给 S3 对象?
【发布时间】:2021-02-17 19:21:31
【问题描述】:

当我将函数应用到 S3 对象时,如何找出正在调度的方法?

例如,如果我运行代码

df <- data.frame(list("a" = c(1,2,3)), "b" = c(7,8,9))

print(df)

我认为 print.data.frame 方法正在调度,因为它在运行 methods(class="data.frame") 时出现

有没有办法验证这一点?比如函数接收printdata.frame,输出使用的方法?

【问题讨论】:

    标签: r oop methods


    【解决方案1】:

    sloop 包可以显示更多详细信息。例如

    sloop::s3_dispatch(print(df))
    # => print.data.frame
    #  * print.default
    

    这会显示所有可能的匹配项,并突出显示实际使用的匹配项 (print.data.frame)

    但通常你需要查看你传递给函数的对象的class()。与为函数列出的methods() 匹配的第一个类将是被调用的类。如果您想查看将要使用的函数的代码,您可以使用

    getS3method("print", "data.frame")
    

    【讨论】:

      猜你喜欢
      • 2013-04-02
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多