如何正确注销R中通过.S3method()注册的S3方法?
R中手动注销已注册S3方法的正确方法
.S3method() 本身没有提供注销方法的参数逻辑,传入NULL作为第三个参数时,函数只会尝试写入空值绑定,不会删除已存在的有效注册记录,因此不会生效。
所有手动注册的S3方法都会存储在对应环境的.__S3MethodsTable__隐藏列表中,直接删除列表里的对应键值对即可完成注销:
# 注销全局注册的model_package.lm方法 rm(list = "model_package.lm", envir = base::.__S3MethodsTable__.)
执行后可以用以下代码验证结果,返回NULL即代表注销成功:
getS3method("model_package", "lm", optional = TRUE)
如果方法是注册在特定包的命名空间下,将代码中的环境替换为对应包命名空间下的S3方法表即可:
# 示例:注销your_pkg包内注册的对应S3方法 rm( list = "model_package.lm", envir = asNamespace("your_pkg")$.__S3MethodsTable__. )
内容的提问来源于stack exchange,提问作者bjfletcher
相关产品推荐
相关产品推荐

