如何让自定义泛型方法的参数默认值与scale.default保持一致?
解决泛型方法参数默认值同步问题
要让scale.newclass的center和scale参数默认值自动跟随scale.default的变化,核心是不要硬编码默认值,而是动态读取scale.default的参数配置,具体有两种常用实现方式:
方法一:直接在参数定义中动态获取默认值
在scale.newclass的参数声明里,直接调用formals()函数获取scale.default的当前默认值,这样每次调用函数时都会自动同步最新配置:
scale.newclass <- function(x, center = formals(scale.default)$center, scale = formals(scale.default)$scale) { # 这里编写你的新类专属处理逻辑 # 例如调用默认方法完成核心计算 result <- NextMethod() # 对结果做新类的定制化调整 ... return(result) }
方法二:在函数内部补全默认值
如果需要对参数做额外校验或预处理,可以在函数开头判断参数是否缺失,缺失时从scale.default读取默认值:
scale.newclass <- function(x, center, scale) { # 补全center的默认值 if (missing(center)) { center <- formals(scale.default)$center } # 补全scale的默认值 if (missing(scale)) { scale <- formals(scale.default)$scale } # 后续执行新类专属逻辑 ... }
注意事项
- 确保
scale.default所在的环境可访问(基础包函数无需额外处理,第三方包函数需保证包已加载) - 使用
NextMethod()调用默认方法时,注意参数传递的一致性,避免参数冲突
内容的提问来源于stack exchange,提问作者Karolis Koncevičius
相关产品推荐
相关产品推荐

