R S3泛型组min自定义方法调用出现两次输出原因问询
问题成因
两次打印是两个独立的打印逻辑依次触发导致的:
- 第一次打印来自
min.ben方法内部你显式调用的print("Test"),属于代码里写死的主动打印逻辑,运行后输出第一次结果。 - 第二次打印和R的原语泛型函数调度规则有关:
min属于R的Summary组泛型,同时是内置原语函数,它调用S3自定义方法后,会强制取消返回值的invisible标记,让返回值变为可见状态。- 你写的
min.ben没有显式指定返回值,默认将最后一行表达式print("Test")的结果作为返回值。print函数本身的返回值是它打印的字符串"Test",正常会自带invisible属性避免重复打印,但被原语泛型强制取消了该属性。 - 你在交互式R环境中直接执行
min(x)没有赋值给变量,R会默认打印所有可见的表达式返回值,因此触发了第二次打印。
你可以通过两个方式验证该逻辑:
- 将调用结果赋值给变量,就不会触发自动打印,只会输出一次:
res <- min(x)
- 自定义方法显式返回不可见对象,也只会输出一次:
min.ben <- function(..., na.rm = FALSE) invisible(print("Test")) min(x)
内容的提问来源于stack exchange,提问作者Ben Deivide
相关产品推荐
相关产品推荐

