我已经定义max()
了如下函数:
max <- function(...) max(...,na.rm=T)
Run Code Online (Sandbox Code Playgroud)
但它无法计算max(1:5)
以下错误:Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
观察结果可以traceback()
识别问题:
88: max(..., na.rm = T) at PositionMeth.R#1521
87: max(..., na.rm = T) at PositionMeth.R#1521
86: max(..., na.rm = T) at PositionMeth.R#1521
85: max(..., na.rm = T) at PositionMeth.R#1521
84: max(..., na.rm = T) at PositionMeth.R#1521
Run Code Online (Sandbox Code Playgroud)
新max(...)
函数在正文中调用自身,而不是原始max()
函数.一个简单的解决方案是重命名函数:Max <- function(...) max(...,na.rm=T)
.没有重命名是否有其他好的选择 - 强迫R max()
在新的主体中运行原始功能max(...)
?
您想使用其命名空间调用原始max函数base
:
max <- function(...) base::max(...,na.rm=T)
Run Code Online (Sandbox Code Playgroud)