r - rep 真的是泛型吗?

标签 r generics replicate r-s3

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

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

The documentation for rep 提出了类似的声明,但我的控制台没有提供类似的输出:

> 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, 0)

如果您的函数是可见的“对象”,它只会进行通用调度 here .

R 中的矩阵不被视为“对象”,它们是基本类型,因此不会进行分派(dispatch)。

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

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

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

关于r - rep 真的是泛型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66304127/

相关文章:

r - 在保留原始文件信息(创建时间等)的同时复制文件

r - ggplot 错误 : similar data graphs, 为什么不再?

使用 protobuf-net 序列化通用树

在 R 中使用鲁棒错误复制 Stata Probit

list - Common Lisp 相当于 Haskell 的副本?

r - ggraph 中的选择性颜色/大小节点

r - 如何反转 ggplot2 的默认调色板

java - 具有泛型的 Vavr 给出了不兼容的类型

c# - "A <T>(IList<T> x) where T : I"和 "A(IList<I> x)"之间的区别?

php - Laravel 4.2 复制包括子项目