【发布时间】: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,您将看到新的array2print方法被调用,即使您在控制台中键入裸对象名称也是如此。但是,除非您正在创建一个新的对象类,否则这并不是那么有用。