【问题标题】:Defining custom print methods for arrays and atomic vectors为数组和原子向量定义自定义打印方法
【发布时间】:2018-07-29 02:06:12
【问题描述】:

我想为数组定义一个不同的打印方法,但恐怕我对 S3 调度有一些了解。如果我显式调用 print(x),则会调用我的自定义打印方法,但如果我只是在控制台上键入 x,则不会调用我的自定义打印方法。但是,如果我定义了一个自定义 S3 类,则会调用相应的打印方法。

如果我尝试为 print.numeric 定义一个方法,也会发生类似的事情

这是一个最小的例子:

print.array <- function(x, ...) cat("Hi!\n")

x <- array(1:8, c(2,2,2) )

print(x) # the print method defined above is called
# Hi!
x        # the print method defined above is NOT called

有人对正在发生的事情有任何见解吗?当在控制台上仅评估 x 时,实际打印的是什么函数?

【问题讨论】:

  • 这可能与auto-printing 有关,当您为定义了自动打印方法的对象类键入裸对象名称时。链接答案中的注释意味着您无法在 R 中更改它,因为它是在 C 级别处理的。如果您将函数名称更改为print.array2,然后执行class(x) = "array2"; x,您将看到新的array2 print 方法被调用,即使您在控制台中键入裸对象名称也是如此。但是,除非您正在创建一个新的对象类,否则这并不是那么有用。

标签: r r-s3


【解决方案1】:

您需要在扩展结构(包)中的NAMESPACE(参见here)中定义S3方法,如下所示:

export(print.array)
S3method(print, array)

我建议你使用devtools 来创建你的“包”(可以很容易地只包含你的print.array 函数),你会发现一些很好的资源here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多