为数组和原子向量定义自定义打印方法

t.k*_*ski 10 r r-s3

我想为数组定义一个不同的打印方法,但我担心我不了解S3调度.如果我明确地调用print(x),则会调用我的自定义打印方法,但如果我只是在控制台上键入x,则不会调用它.但是,如果我定义自定义S3类,则调用适当的print方法.

如果我尝试为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
Run Code Online (Sandbox Code Playgroud)

有没有人对正在发生的事情有任何见解?x在控制台上进行评估时,实际进行打印的功能是什么?

Tho*_*rme 1

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

export(print.array)
S3method(print, array)
Run Code Online (Sandbox Code Playgroud)

我建议您使用devtools创建您的“包”(可以轻松地仅包含您的函数),您会在这里print.array找到一些优秀的资源。