15

我想为数组定义不同的打印方法,但恐怕我不了解 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当只是在控制台上评估时,什么函数实际上正在打印?

4

1 回答 1

0

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

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

我建议你使用devtools来创建你的“包”(可以很容易地只包含你的print.array函数),你会在这里找到一些优秀的资源。

于 2018-03-09T04:41:41.693 回答