我想为数组定义一个不同的打印方法,但我担心我不了解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在控制台上进行评估时,实际进行打印的功能是什么?
您需要在扩展结构(包)的 a NAMESPACE(请参阅此处)中定义 S3 方法,如下所示:
export(print.array)
S3method(print, array)
Run Code Online (Sandbox Code Playgroud)
我建议您使用devtools创建您的“包”(可以轻松地仅包含您的函数),您会在这里print.array找到一些优秀的资源。