微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

rep 真的是通用的吗?

如何解决rep 真的是通用的吗?

当我在控制台中键入泛型的函数名称时,我希望看到对 UseMethod调用。例如,determinantthe documentation 将其称为泛型,当我在控制台中键入它时,我得到以下输出

> determinant
function (x,logarithm = TRUE,...) 
UseMethod("determinant")
<bytecode: 0x55fb617086b8>
<environment: namespace:base> #
rep

The documentation 提出了类似的声明,但我的控制台没有给出类似的输出

> rep
function (x,...)  .Primitive("rep")

还有my attempts to extend rep have been unsuccessful

这给我留下了两种可能性。要么我对 R 的泛型函​​数理解很差,要么 rep 根本不是泛型。是哪个?

解决方法

the code for the interal rep function 中调用

DispatchOrEval(call,op,"rep",args,rho,&a,0)

如果您的函数是可以看到 here 的“对象”,它只会执行通用调度。

R 中的矩阵不被视为“对象”,它们是原始类型,因此不会发生调度。

is.object(matrix(1:3))
# [1] FALSE

这是针对调用频繁且需要快速的函数的代码优化。

因此,您将无法使用 S3 泛型为矩阵创建自定义 rep 函数。如果要更改行为(这可能会破坏依赖现有行为的函数),则必须隐藏基本函数。用不同的名称编写自己的函数来执行您想要的操作可能会更好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。